
/******************************************************************************
 *
 * Copyright 2019, Fuzhou Rockchip Electronics Co.Ltd. All rights reserved.
 * No part of this work may be reproduced, modified, distributed, transmitted,
 * transcribed, or translated into any language or computer format, in any form
 * or by any means without written permission of:
 * Fuzhou Rockchip Electronics Co.Ltd .
 *
 *
 *****************************************************************************/
/**
 * @file    calibtags.cpp
 *
 *****************************************************************************/

#include "calibtags.h"
#include <ebase/dct_assert.h>
#include <base/xcam_log.h>

//#define CALIBDB_CHECK_DEBUG

#define calib_uint32_array_size(x) (sizeof(x)/sizeof(uint32_t))
#define check_tags_array_info(x) \
    x, \
    calib_uint32_array_size(x)

#define check_tags_array_ignore \
    NULL, \
    -1

uint32_t calib_filestart_sub_tags[] = {
	CALIB_HEADER_TAG_ID,
	CALIB_SENSOR_TAG_ID,
	CALIB_SYSTEM_TAG_ID,
};

uint32_t calib_header_sub_tags[] = {
	CALIB_HEADER_CREATION_DATE_TAG_ID,
	CALIB_HEADER_CREATOR_TAG_ID,
	CALIB_HEADER_SENSOR_NAME_TAG_ID,
	CALIB_HEADER_SAMPLE_NAME_TAG_ID,
	CALIB_HEADER_GENERATOR_VERSION_TAG_ID,
	CALIB_HEADER_CODE_XML_PARSE_VERSION_TAG_ID,
	CALIB_HEADER_ISP_OUTPUT_TYPE_TAG_ID,
	CALIB_HEADER_RESOLUTION_TAG_ID,
	CALIB_HEADER_SDK_IQ_VERIFY_ID,
	CALIB_HEADER_XML_MAGIC_VERSION_CODE_ID,
};

uint32_t calib_header_resolution_sub_tags[] = {
	CALIB_HEADER_RESOLUTION_NAME_TAG_ID,
	CALIB_HEADER_RESOLUTION_ID_TAG_ID,
	CALIB_HEADER_RESOLUTION_WIDTH_TAG_ID,
	CALIB_HEADER_RESOLUTION_HEIGHT_TAG_ID,
	CALIB_HEADER_RESOLUTION_FRATE_TAG_ID,
};

uint32_t calib_header_resolution_framerate_sub_tags[] = {
	CALIB_HEADER_RESOLUTION_FRATE_NAME_TAG_ID,
	CALIB_HEADER_RESOLUTION_FRATE_FPS_TAG_ID,
};


uint32_t calib_sensor_sub_tags[] = {
	CALIB_SENSOR_AWB_TAG_ID,
	CALIB_SENSOR_LSC_TAG_ID,
	CALIB_SENSOR_CC_TAG_ID,
	CALIB_SENSOR_AF_TAG_ID,
	CALIB_SENSOR_AEC_TAG_ID,
	CALIB_SENSOR_BLS_TAG_ID,
  	CALIB_SENSOR_DEGAMMA_TAG_ID,
  	CALIB_SENSOR_WDR_TAG_ID,
  	CALIB_SENSOR_CAC_TAG_ID,
  	CALIB_SENSOR_DPF_TAG_ID,
  	CALIB_SENSOR_DPCC_TAG_ID,
  	CALIB_SENSOR_IESHARPEN_TAG_ID,
  	CALIB_SENSOR_GOC_TAG_ID,
  	CALIB_SENSOR_CPROC_TAG_ID,
  	CALIB_SENSOR_OTP_TAG_ID,
};

uint32_t calib_sensor_awb_sub_tags[] = {
	CALIB_SENSOR_AWB_VALID_VERSION_NAME_TAG_ID,
	CALIB_SENSOR_AWB_VERSION_10_TAG_ID,
	CALIB_SENSOR_AWB_VERSION_11_TAG_ID,
	CALIB_SENSOR_AWB_FLASH_PARA_TAG_ID,
};

uint32_t calib_sensor_awb_v10_sub_tags[] = {
	CALIB_SENSOR_AWB_V10_GLOBALS_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_TAG_ID,
};

uint32_t calib_sensor_awb_v10_global_sub_tags[] = {
	CALIB_SENSOR_AWB_V10_GLOBALS_NAME_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RESOLUTION_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_SVDMEANVALUE_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_PCAMATRIX_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_CENTERLINE_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RG2_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MAXDIST2_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RG1_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MAXDIST1_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALFADE2_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALGAINDIST2_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALFADE1_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALGAINDIST1_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_KFACTOR_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_FADE2_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_CB_MIN_REGIONMAX_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_CR_MIN_REGIONMAX_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MAX_CSUM_REGIONMAX_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_CB_MIN_REGIONMIN_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_CR_MIN_REGIONMIN_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MAX_CSUM_REGIONMIN_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MINC_REGIONMAX_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MAXY_REGIONMAX_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MINY_MAXG_REGIONMAX_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MINC_REGIONMIN_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MAXY_REGIONMIN_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_MINY_MAXG_REGIONMIN_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_REFCB_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_REFCR_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_REGION_SIZE_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_REGION_SIZE_INC_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_REGION_SIZE_DEC_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_INDOOR_MIN_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_MAX_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_MAX_SKY_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_OUTDOOR_MIN_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_YELLOW_LIMIT_ENABLE_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_A_LIMIT_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_A_WEIGHT_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_YELLOW_LIMIT_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_ILL_TO_CWF_ENABLE_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_ILL_TO_CWF_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_ILL_TO_CWF_WEIGHT_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_CLIP_OUTDOOR_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_IIR_ID
  };

uint32_t calib_sensor_awb_v10_IIR_sub_tags[] = {
    CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMP_COEF_ADD_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMP_COEF_SUB_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMP_FILTER_THRESHOLD_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMPING_COEF_MIN_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMPING_COEF_MAX_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMPING_COEF_INIT_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_IIR_EXP_PRIOR_FILTER_SIZE_MAX_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_IIR_EXP_PRIOR_FILTER_SIZE_MIN_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_IIR_EXP_PRIOR_MIDDLE_TAG_ID,
};

uint32_t calib_sensor_awb_v10_iilumination_sub_tags[] = {
	CALIB_SENSOR_AWB_V10_ILLUMINATION_NAME_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_DOOR_TYPE_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_ALSC_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_AWB_TYPE_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_MANUAL_WB_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_MANUAL_CC_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_MANUAL_CTO_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_SAT_CT_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_VIG_CT_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_ACC_TAG_ID,
};

uint32_t calib_sensor_awb_v10_iilumination_GMM_sub_tags[] = {
	CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_INV_COV_MATRIX_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_GAUSSIAN_SFACTOR_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_GAUSSIAN_MVALUE_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_TAU_TAG_ID,

};

uint32_t calib_sensor_awb_v10_iilumination_ALSC_sub_tags[] = {
	CALIB_SENSOR_AWB_V10_ILLUMINATION_ALSC_RES_TAG_ID,
    CALIB_SENSOR_AWB_V10_ILLUMINATION_ALSC_RES_LSC_PROFILE_LIST_TAG_ID,

};

uint32_t calib_sensor_awb_v10_iilumination_SAT_sub_tags[] = {
    CALIB_SENSOR_AWB_V10_ILLUMINATION_SAT_CT_GAIN_TAG_ID,
    CALIB_SENSOR_AWB_V10_ILLUMINATION_SAT_CT_SAT_TAG_ID,
};

uint32_t calib_sensor_awb_v10_iilumination_VIG_sub_tags[] = {
	CALIB_SENSOR_AWB_V10_ILLUMINATION_VIG_CT_GAIN_TAG_ID,
    CALIB_SENSOR_AWB_V10_ILLUMINATION_VIG_CT_VIG_TAG_ID,
};

uint32_t calib_sensor_awb_v10_iilumination_aCC_sub_tags[] = {
	CALIB_SENSOR_AWB_V10_ILLUMINATION_ACC_CC_PROFILE_LIST_TAG_ID,
};

uint32_t calib_sensor_awb_v11_sub_tags[] = {
	CALIB_SENSOR_AWB_V11_GLOBALS_TAG_ID,
	CALIB_SENSOR_AWB_V11_ILLUMINATION_TAG_ID,
};

uint32_t calib_sensor_awb_v11_global_sub_tags[] = {
    CALIB_SENSOR_AWB_V10_GLOBALS_NAME_TAG_ID,
	CALIB_SENSOR_AWB_V10_GLOBALS_RESOLUTION_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_CENTERLINE_TAG_ID,
    CALIB_SENSOR_AWB_V11_GLOBALS_GAIN_CLIP_ENABLE_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RG1_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_MAXDIST1_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RG2_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_MAXDIST2_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALFADE1_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALGAINDIST1_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALFADE2_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALGAINDIST2_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_KFACTOR_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_FADE2_TAG_ID,
    CALIB_SENSOR_AWB_V11_GLOBALS_MAX_CSUM_BR_TAG_ID,
    CALIB_SENSOR_AWB_V11_GLOBALS_MAX_CSUM_SR_TAG_ID,
    CALIB_SENSOR_AWB_V11_GLOBALS_MINC_BR_TAG_ID,
    CALIB_SENSOR_AWB_V11_GLOBALS_MAXY_BR_TAG_ID,
    CALIB_SENSOR_AWB_V11_GLOBALS_MINY_BR_TAG_ID,
    CALIB_SENSOR_AWB_V11_GLOBALS_MINC_SR_TAG_ID,
    CALIB_SENSOR_AWB_V11_GLOBALS_MAXY_SR_TAG_ID,
    CALIB_SENSOR_AWB_V11_GLOBALS_MINY_SR_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_REFCB_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_REFCR_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_REGION_SIZE_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_REGION_SIZE_INC_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_REGION_SIZE_DEC_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_INDOOR_MIN_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_MAX_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_MAX_SKY_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_OUTDOOR_MIN_TAG_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_YELLOW_LIMIT_ENABLE_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_A_LIMIT_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_A_WEIGHT_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_YELLOW_LIMIT_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_ILL_TO_CWF_ENABLE_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_ILL_TO_CWF_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_ILL_TO_CWF_WEIGHT_ID,
    CALIB_SENSOR_AWB_V10_GLOBALS_CLIP_OUTDOOR_ID,
  	CALIB_SENSOR_AWB_V10_GLOBALS_IIR_ID,

};

uint32_t calib_sensor_awb_v11_iilumination_sub_tags[] = {
	CALIB_SENSOR_AWB_V10_ILLUMINATION_NAME_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_DOOR_TYPE_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_AWB_TYPE_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_MANUAL_WB_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_MANUAL_CC_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_MANUAL_CTO_TAG_ID,
	CALIB_SENSOR_AWB_V11_ILLUMINATION_REFERENCE_GAIN_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_SAT_CT_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_VIG_CT_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_ALSC_TAG_ID,
	CALIB_SENSOR_AWB_V10_ILLUMINATION_ACC_TAG_ID,

};
uint32_t calib_sensor_awb_flash_para_sub_tags[]={
	CALIB_SENSOR_AWB_FLASH_FLASHTYPE_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_LVVALUES_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_PREFLASHWEIGHTS1_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_LVFLASHTH1_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_LVVALRATIO_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_PREFLASHWEIGHTS2_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_LVFLASHTH2_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_LVVALRATIO3_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_MAINFLASHWEIGHTS_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_LVVALUEIIRSIZE_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_DAMPFACTOR_TAG_ID,
    CALIB_SENSOR_AWB_FLASH_AECCONVERGETH_TAG_ID,
};


uint32_t calib_sensor_lsc_sub_tags[] = {
	CALIB_SENSOR_LSC_PROFILE_NAME_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_RESOLUTION_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_ILLUMINATION_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_SECTORS_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_NO_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_XO_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_YO_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_SECTOR_SIZE_X_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_SECTOR_SIZE_Y_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_VIGNETTING_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_SAMPLES_RED_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_SAMPLES_GREENR_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_SAMPLES_GREENB_TAG_ID,
	CALIB_SENSOR_LSC_PROFILE_LSC_SAMPLES_BLUE_TAG_ID,
};

uint32_t calib_sensor_cc_sub_tags[] = {
	CALIB_SENSOR_CC_PROFILE_NAME_TAG_ID,
	CALIB_SENSOR_CC_PROFILE_SATURATION_TAG_ID,
	CALIB_SENSOR_CC_PROFILE_CC_MATRIX_TAG_ID,
	CALIB_SENSOR_CC_PROFILE_CC_OFFSETS_TAG_ID,
	CALIB_SENSOR_CC_PROFILE_WB_TAG_ID,
};



uint32_t calib_sensor_af_sub_tags[] = {
	CALIB_SENSOR_AF_WINDOW_NUM_TAG_ID,
	CALIB_SENSOR_AF_WINDOW_A_TAG_ID,
	CALIB_SENSOR_AF_WINDOW_B_TAG_ID,
	CALIB_SENSOR_AF_WINDOW_C_TAG_ID,
	CALIB_SENSOR_AF_CONTRAST_AF_TAG_ID,
	CALIB_SENSOR_AF_LASER_AF_TAG_ID,
	CALIB_SENSOR_AF_PDAF_TAG_ID,
};

uint32_t calib_sensor_af_windowA_sub_tags[] = {
	CALIB_SENSOR_AF_H_OFFS_TAG_ID,
	CALIB_SENSOR_AF_V_OFFS_TAG_ID,
	CALIB_SENSOR_AF_H_SIZE_TAG_ID,
	CALIB_SENSOR_AF_V_SIZE_TAG_ID,
};

uint32_t calib_sensor_af_windowB_sub_tags[] = {
	CALIB_SENSOR_AF_H_OFFS_TAG_ID,
	CALIB_SENSOR_AF_V_OFFS_TAG_ID,
	CALIB_SENSOR_AF_H_SIZE_TAG_ID,
	CALIB_SENSOR_AF_V_SIZE_TAG_ID,
};

uint32_t calib_sensor_af_windowC_sub_tags[] = {
	CALIB_SENSOR_AF_H_OFFS_TAG_ID,
	CALIB_SENSOR_AF_V_OFFS_TAG_ID,
	CALIB_SENSOR_AF_H_SIZE_TAG_ID,
	CALIB_SENSOR_AF_V_SIZE_TAG_ID,
};

uint32_t calib_sensor_af_contrastAf_sub_tags[] = {
	CALIB_SENSOR_AF_CONTRAST_ENABLE_TAG_ID,
	CALIB_SENSOR_AF_SEARCH_STRATEGY_TAG_ID,
	CALIB_SENSOR_AF_FULL_DIR_TAG_ID,
	CALIB_SENSOR_AF_FULL_RANGE_TBL_TAG_ID,
	CALIB_SENSOR_AF_ADAPTIVE_DIR_TAG_ID,
	CALIB_SENSOR_AF_ADAPTIVE_RANGE_TBL_TAG_ID,
	CALIB_SENSOR_AF_TRIG_THERS_TAG_ID,
	CALIB_SENSOR_AF_TRIG_VALUE_TAG_ID,
	CALIB_SENSOR_AF_TRIG_FRAMES_TAG_ID,
	CALIB_SENSOR_AF_TRIG_ANTI_FLASH_TAG_ID,
	CALIB_SENSOR_AF_FINISH_THERS_MAIN_TAG_ID,
	CALIB_SENSOR_AF_FINISH_THERS_SUB_TAG_ID,
	CALIB_SENSOR_AF_FINISH_THERS_OFFSET_TAG_ID,
	CALIB_SENSOR_AF_STABLE_THERS_TAG_ID,
	CALIB_SENSOR_AF_STABLE_VALUE_TAG_ID,
	CALIB_SENSOR_AF_STABLE_FRAMES_TAG_ID,
	CALIB_SENSOR_AF_STABLE_TIME_TAG_ID,
	CALIB_SENSOR_AF_OUT_FOCUS_VALUE_TAG_ID,
	CALIB_SENSOR_AF_OUT_FOCUS_LUMA_TAG_ID,
	CALIB_SENSOR_AF_OUT_FOCUS_POS_TAG_ID,
};

uint32_t calib_sensor_af_laserAF_sub_tags[] = {
	CALIB_SENSOR_AF_LASERAF_ENABLE_TAG_ID,
	CALIB_SENSOR_AF_LASER_AF_VCMDOT_TAG_ID,
	CALIB_SENSOR_AF_LASER_AF_DISTANCEDOT_TAG_ID,
};

uint32_t calib_sensor_af_pdAF_sub_tags[] = {
	CALIB_SENSOR_AF_PDAF_ENABLE_TAG_ID,
};


uint32_t calib_sensor_aec_sub_tags[] = {
	CALIB_SENSOR_AEC_SETPOINT_TAG_ID,
	CALIB_SENSOR_AEC_NIGHT_SETPOINT_TAG_ID,
	CALIB_SENSOR_AEC_CLM_TOLERANCE_TAG_ID,
	CALIB_SENSOR_AEC_DAMP_OVER_TAG_ID,
	CALIB_SENSOR_AEC_DAMP_UNDER_TAG_ID,
	CALIB_SENSOR_AEC_DAMP_OVER_VIDEO_TAG_ID,
	CALIB_SENSOR_AEC_DAMP_UNDER_VIDEO_TAG_ID,
	CALIB_SENSOR_AEC_AFPS_MAX_GAIN_TAG_ID,

	CALIB_SENSOR_AEC_ECM_TAG_ID,

	CALIB_SENSOR_AEC_GAINRANGE_TAG_ID,
	CALIB_SENSOR_AEC_GRIDWEIGHTS_TAG_ID,
	CALIB_SENSOR_AEC_NIHGT_GRIDWEIGHTS_TAG_ID,
	CALIB_SENSOR_AEC_TIMEFACTOR_TAG_ID,
	CALIB_SENSOR_AEC_CAMERICISPHISTMODE_TAG_ID,
	CALIB_SENSOR_AEC_CAMERICISPEXPMEASURINGMODE_TAG_ID,

	CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_TAG_ID,
	CALIB_SENSOR_AEC_EXP_SEPARATE_TAG_ID,
	CALIB_SENSOR_AEC_FPS_FPS_SET_CONFIG_TAG_ID,
	CALIB_SENSOR_AEC_INTERVAL_ADJUST_STRATEGY_TAG_ID,

	CALIB_SENSOR_AEC_AOE_ENABLE_TAG_ID,
	CALIB_SENSOR_AEC_AOE_MAX_POINT_TAG_ID,
	CALIB_SENSOR_AEC_AOE_MIN_POINT_TAG_ID,
	CALIB_SENSOR_AEC_AOE_Y_MAX_TH_TAG_ID,
	CALIB_SENSOR_AEC_AOE_Y_MIN_TH_TAG_ID,
	CALIB_SENSOR_AEC_AOE_STEP_INC_TAG_ID,
	CALIB_SENSOR_AEC_AOE_STEP_DEC_TAG_ID,

	CALIB_SENSOR_AEC_DON_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_CONFIG_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_CONFIG_TAG_ID,
	CALIB_SENSOR_AEC_HIST_2_HAL_TAG_ID,
	CALIB_SENSOR_LOCK_AE_TAG_ID,
	CALIB_SENSOR_HDRCTRL_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_TAG_ID,
};

uint32_t calib_sensor_aec_ecm_sub_tags[] = {
	CALIB_SENSOR_AEC_ECM_NAME_TAG_ID,
	CALIB_SENSOR_AEC_ECM_SCHEMES_TAG_ID,
};

uint32_t calib_sensor_aec_ecm_schem_sub_tags[] = {
	CALIB_SENSOR_AEC_ECM_SCHEME_NAME_TAG_ID,
	CALIB_SENSOR_AEC_ECM_SCHEME_OFFSETT0FAC_TAG_ID,
	CALIB_SENSOR_AEC_ECM_SCHEME_SLOPEA0_TAG_ID,

};
uint32_t calib_sensor_aec_dynamic_setpoint_sub_tags[] = {
	CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_NAME_TAG_ID,
	CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_ENABLE_TAG_ID,
	CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_EXPVALUE_TAG_ID,
	CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_DYSETPOINT_TAG_ID,
	CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_FILTER_FAC_TAG_ID,
};


uint32_t calib_sensor_aec_exposure_separate_sub_tags[] = {
	CALIB_SENSOR_AEC_EXP_SEPARATE_NAME_TAG_ID,
	CALIB_SENSOR_AEC_EXP_SEPARATE_TIMEDOT_TAG_ID,
	CALIB_SENSOR_AEC_EXP_SEPARATE_GAINDOT_TAG_ID,
	CALIB_SENSOR_AEC_EXP_SEPARATE_LTIMEDOT_TAG_ID,
	CALIB_SENSOR_AEC_EXP_SEPARATE_STIMEDOT_TAG_ID,
	CALIB_SENSOR_AEC_EXP_SEPARATE_LGAINDOT_TAG_ID,
	CALIB_SENSOR_AEC_EXP_SEPARATE_SGAINDOT_TAG_ID,
};

uint32_t calib_sensor_aec_fps_set_config_sub_tags[] = {
	CALIB_SENSOR_AEC_FPS_FPS_SET_ENABLE_TAG_ID,
	CALIB_SENSOR_AEC_FPS_IS_FPS_FIX_TAG_ID,
	CALIB_SENSOR_AEC_FPS_FPS_FIX_TIMEDOT_TAG_ID,

};

uint32_t calib_sensor_aec_interval_adjust_strategy_sub_tags[] = {
	CALIB_SENSOR_AEC_INTERVAL_ADJUST_ENABLE_TAG_ID,
	CALIB_SENSOR_AEC_INTERVAL_ADJUST_DLUMA_HIGH_TH_TAG_ID,
	CALIB_SENSOR_AEC_INTERVAL_ADJUST_DLUMA_LOW_TH_TAG_ID,
	CALIB_SENSOR_AEC_INTERVAL_ADJUST_TRIGGER_FRAME_TAG_ID,
};

uint32_t calib_sensor_aec_DON_sub_tags[] = {
	CALIB_SENSOR_AEC_DON_NIGHT_TRIGGER_TAG_ID,
	CALIB_SENSOR_AEC_DON_NIGHT_MODE_TAG_ID,
	CALIB_SENSOR_AEC_DON_DAY2NIGHT_FAC_TH_TAG_ID,
	CALIB_SENSOR_AEC_DON_NIGHT2DAY_FAC_TH_TAG_ID,
	CALIB_SENSOR_AEC_DON_BOUNCING_TH_TAG_ID,
};


uint32_t calib_sensor_aec_NLSC_sub_tags[] = {
	CALIB_SENSOR_AEC_NLSC_ENABLE_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_IR_RG_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_IR_BG_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_MAX_DIS_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_COLOR2BLACK_COUNT_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_COLOR2BLACK_THRESH_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_BLACK2COLOR_COUNT_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_BLACK2COLOR_THRESH_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_BLACK2COLOR_VB_PERCENT_TAG_ID,
	CALIB_SENSOR_AEC_NLSC_COLOR2BLACK_STABLE_FPS_TAG_ID,

};

uint32_t calib_sensor_aec_backlight_sub_tags[] = {
	CALIB_SENSOR_AEC_BACKLIGHT_ENABLE_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_MODE_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_WEIGHT_METHOD_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_DARKROI_METHOD_TAG_ID
};

uint32_t calib_sensor_aec_backlight_weight_method_sub_tags[] = {
	CALIB_SENSOR_AEC_BACKLIGHT_LUMALOWTH_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_LUMAHIGHTH_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_LVTH_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_WEIGHTMINTH_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_WEIGHTMAXTH_TAG_ID
};

uint32_t calib_sensor_aec_backlight_darkroi_method_sub_tags[] = {
	CALIB_SENSOR_AEC_BACKLIGHT_OEROI_LOWTH_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_LV_LOWTH_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_LV_HIGHTH_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_EXPLEVEL_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_NONOEPDF_HIGHTH_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_DARKPDF_HIGHTH_TAG_ID,
	CALIB_SENSOR_AEC_BACKLIGHT_DYLOCALSETPOINT_TAG_ID
};

uint32_t calib_sensor_aec_hist2hal_sub_tags[] = {
	CALIB_SENSOR_AEC_HIST_2_HAL_ENABLE_TAG_ID,
	CALIB_SENSOR_AEC_HIST_2_HAL_LOWHISTBINTH_TAG_ID,

};

uint32_t calib_sensor_aec_lockAE_sub_tags[] = {
	CALIB_SENSOR_LOCK_AE_ENABEL_TAG_ID,
	CALIB_SENSOR_LOCK_AE_GAINVALUE_TAG_ID,
	CALIB_SENSOR_LOCK_AE_TIMEVALUE_TAG_ID,
};

uint32_t calib_sensor_aec_HDRctrl_sub_tags[] = {
	CALIB_SENSOR_HDRCTRL_ENABEL_TAG_ID,
	CALIB_SENSOR_HDRCTRL_MODE_TAG_ID,
	CALIB_SENSOR_HDRCTRL_FRAMENUM_TAG_ID,
	CALIB_SENSOR_HDRCTRL_DCG_Ratio_TAG_ID,
	//Lframe ctrl
	CALIB_SENSOR_HDRCTRL_LFRAMECTRL_TAG_ID,
	//sframe ctrl
	CALIB_SENSOR_HDRCTRL_SFRAMECTRL_TAG_ID,

};

uint32_t calib_sensor_aec_HDRctrl_LframeCtrl_sub_tags[] = {
	CALIB_SENSOR_HDRCTRL_OEROI_LOWTH_TAG_ID,
	CALIB_SENSOR_HDRCTRL_LV_HIGHTH_TAG_ID,
	CALIB_SENSOR_HDRCTRL_LV_LOWTH_TAG_ID,
	CALIB_SENSOR_HDRCTRL_LEXPLEVEL_TAG_ID,
	CALIB_SENSOR_HDRCTRL_LSETPOINT_TAG_ID,
	CALIB_SENSOR_HDRCTRL_DARKLUMA_TAG_ID,
	CALIB_SENSOR_HDRCTRL_NONOEPDF_TH_TAG_ID,
	CALIB_SENSOR_HDRCTRL_DARKPDF_TH_TAG_ID,
	CALIB_SENSOR_HDRCTRL_M2S_Ratio_TAG_ID,
	CALIB_SENSOR_HDRCTRL_L2M_Ratio_TAG_ID,

};

uint32_t calib_sensor_aec_HDRctrl_SframeCtrl_sub_tags[] = {
	CALIB_SENSOR_HDRCTRL_SEXPLEVEL_TAG_ID,
	CALIB_SENSOR_HDRCTRL_OETOLERANCE_TAG_ID,
	CALIB_SENSOR_HDRCTRL_OELUMA_TAG_ID,
	CALIB_SENSOR_HDRCTRL_SSETPOINT_TAG_ID,
	CALIB_SENSOR_HDRCTRL_OELUMADIST_TAG_ID,
};

uint32_t calib_sensor_aec_flashctrl_sub_tags[] = {
	CALIB_SENSOR_FLASHCTRL_FLASH_TRIGGER_TH_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_CURRENT_PCT_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_MAINFLASH_CURRENT_PCT_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_FLASHLIGHT_RATIO_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_EN_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_EXP_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_DIFFH_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_DIFFL_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_FACH_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_FACL_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_MEANLUMA_TH_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_AFFECT_LIMIT_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_EXP_SEPARATE_MODE_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_DUMP_OVERTGT_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_DUMP_UNDERTGT_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_DUMP_OVEREXP_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_MEANLUMA_OE_THL_TAG_ID,
	CALIB_SENSOR_FLASHCTRL_PREFLASH_MEANLUMA_OE_THH_TAG_ID,
};


uint32_t calib_sensor_bls_sub_tags[] = {
	CALIB_SENSOR_BLS_NAME_TAG_ID,
	CALIB_SENSOR_BLS_RESOLUTION_TAG_ID,
	CALIB_SENSOR_BLS_DATA_TAG_ID,

};


uint32_t calib_sensor_goc_sub_tags[] = {
	CALIB_SENSOR_GOC_NAME_TAG_ID,
	CALIB_SENSOR_GOC_ENABLE_MODE_TAG_ID,
	CALIB_SENSOR_GOC_DEF_CFG_MODE_TAG_ID,
	CALIB_SENSOR_GOC_GAMMAY_TAG_ID,
	CALIB_SENSOR_GOC_WDRON_GAMMAY_TAG_ID,

};



uint32_t calib_sensor_wdr_sub_tags[] = {
	CALIB_SENSOR_WDR_ENABLE_TAG_ID,
	CALIB_SENSOR_WDR_MODE_TAG_ID,

	CALIB_SENSOR_WDR_TBD_TAG_ID,
	CALIB_SENSOR_WDR_CURVE1_TAG_ID,
	CALIB_SENSOR_WDR_CURVE2_TAG_ID,

	CALIB_SENSOR_WDR_LOCAL_CURVE_TAG_ID,
	CALIB_SENSOR_WDR_GLOBAL_CURVE_TAG_ID,

	CALIB_SENSOR_WDR_NOISE_RATIO_TAG_ID,
	CALIB_SENSOR_WDR_BEST_LIGHT_TAG_ID,
	CALIB_SENSOR_WDR_GAIN_OFF1_TAG_ID,
	CALIB_SENSOR_WDR_PYM_TAG_ID,
	CALIB_SENSOR_WDR_EPSILON_TAG_ID,
	CALIB_SENSOR_WDR_LVL_TAG_ID,
	CALIB_SENSOR_WDR_FLT_TAG_ID,
	CALIB_SENSOR_WDR_GAIN_MAX_CLIP_ENABLE_TAG_ID,
	CALIB_SENSOR_WDR_GAIN_MAX_VALUE_TAG_ID,
	CALIB_SENSOR_WDR_BAVG_TAG_ID,
	CALIB_SENSOR_WDR_NONL_SEGM_TAG_ID,
	CALIB_SENSOR_WDR_NONL_OPEN_TAG_ID,
	CALIB_SENSOR_WDR_NONL_MODE1_TAG_ID,
	CALIB_SENSOR_WDR_COE0_TAG_ID,
	CALIB_SENSOR_WDR_COE1_TAG_ID,
	CALIB_SENSOR_WDR_COE2_TAG_ID,
	CALIB_SENSOR_WDR_COE_OFF_TAG_ID,

	CALIB_SENSOR_WDR_MAXGAIN_FILTER_TAG_ID,
};


uint32_t calib_sensor_wdr_maxgian_sub_tags[] = {
	CALIB_SENSOR_WDR_MAXGAIN_FILTER_ENABLE_TAG_ID,
	CALIB_SENSOR_WDR_MAXGAIN_SENSOR_GAIN_LEVEL_TAG_ID,
	CALIB_SENSOR_WDR_MAXGAIN_MAXGAIN_LEVEL_TAG_ID,

};



uint32_t calib_sensor_cac_sub_tags[] = {
	CALIB_SENSOR_CAC_NAME_TAG_ID,
	CALIB_SENSOR_CAC_RESOLUTION_TAG_ID,
	CALIB_SESNOR_CAC_X_NORMSHIFT_TAG_ID,
	CALIB_SESNOR_CAC_X_NORMFACTOR_TAG_ID,
	CALIB_SESNOR_CAC_Y_NORMSHIFT_TAG_ID,
	CALIB_SESNOR_CAC_Y_NORMFACTOR_TAG_ID,
	CALIB_SESNOR_CAC_X_OFFSET_TAG_ID,
	CALIB_SESNOR_CAC_Y_OFFSET_TAG_ID,
	CALIB_SESNOR_CAC_RED_PARAMETERS_TAG_ID,
	CALIB_SESNOR_CAC_BLUE_PARAMETERS_TAG_ID,

};

uint32_t calib_system_DPF_sub_tags[] = {
	CALIB_SENSOR_DPF_NAME_TAG_ID,
	CALIB_SENSOR_DPF_RESOLUTION_TAG_ID,
	CALIB_SENSOR_DPF_ADPF_ENABLE_TAG_ID,
	CALIB_SENSOR_DPF_NLL_SEGMENTATION_TAG_ID,
	CALIB_SENSOR_DPF_NLL_COEFF_TAG_ID,
	CALIB_SENSOR_DPF_SIGMA_GREEN_TAG_ID,
	CALIB_SENSOR_DPF_SIGMA_RED_BLUE_TAG_ID,
	CALIB_SENSOR_DPF_GRADIENT_TAG_ID,
	CALIB_SENSOR_DPF_OFFSET_TAG_ID,
	CALIB_SENSOR_DPF_NLGAINS_TAG_ID,

	//filter
	CALIB_SENSOR_DPF_FILTERSETTING_TAG_ID,

	//mfd
	CALIB_SESNOR_MFD_ENABLE_TAG_ID,
	CALIB_SESNOR_MFD_GAIN_TAG_ID,
	CALIB_SESNOR_MFD_FRAMES_TAG_ID,

	//uvnr
	CALIB_SESNOR_UVNR_ENABLE_TAG_ID,
	CALIB_SESNOR_UVNR_GAIN_TAG_ID,
	CALIB_SESNOR_UVNR_RATIO_TAG_ID,
	CALIB_SESNOR_UVNR_DISTANCE_TAG_ID,

	//3DNR
	CALIB_SENSOR_DSP_3DNR_SETTING_TAG_ID,

	//New 3DNR
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_TAG_ID,

};

uint32_t calib_system_DPF_filter_settint_sub_tags[] = {
	CALIB_SENSOR_DPF_FILTERSETTING_NAME_TAG_ID,
	CALIB_SENSOR_DPF_FILTERENABLE_TAG_ID,
	CALIB_SENSOR_DPF_DENOISELEVEL_TAG_ID,
	CALIB_SENSOR_DPF_SHARPENINGLEVEL_TAG_ID,
	CALIB_SENSOR_DPF_FILT_LEVEL_REG_CONF_TAG_ID,
	CALIB_SENSOR_DPF_FILT_DEMOSAIC_TH_CONF_TAG_ID,
	CALIB_SENSOR_DPF_DEMOSAIC_LP_CONF_TAG_ID,
};

uint32_t calib_system_DPF_filter_settint_denoise_level_sub_tags[] = {
	CALIB_SENSOR_DPF_DENOISELEVEL_GAINS_TAG_ID,
	CALIB_SENSOR_DPF_DENOISELEVEL_DLEVEL_TAG_ID,

};

uint32_t calib_system_DPF_filter_settint_sharpen_level_sub_tags[] = {
	CALIB_SENSOR_DPF_SHARPENINGLEVEL_GAINS_TAG_ID,
	CALIB_SENSOR_DPF_SHARPENINGLEVEL_SLEVEL_TAG_ID,
};

uint32_t calib_system_DPF_filter_reg_config_sub_tags[] = {
	CALIB_SENSOR_DPF_FILT_LEVEL_REG_CONF_ENABLE_TAG_ID,
	CALIB_SENSOR_DPF_FILT_LEVEL_TAG_ID,
	CALIB_SENSOR_DPF_FILT_CHR_H_MODE_TAG_ID,
	CALIB_SENSOR_DPF_FILT_CHR_V_MODE_TAG_ID,
	CALIB_SENSOR_DPF_FILT_GRN_STAGE1_TAG_ID,
	CALIB_SENSOR_DPF_FILT_THRESH_BL0_TAG_ID,
	CALIB_SENSOR_DPF_FILT_THRESH_BL1_TAG_ID,
	CALIB_SENSOR_DPF_FILT_FAC_BL0_TAG_ID,
	CALIB_SENSOR_DPF_FILT_FAC_BL1_TAG_ID,
	CALIB_SENSOR_DPF_FILT_THRESH_SH0_TAG_ID,
	CALIB_SENSOR_DPF_FILT_THRESH_SH1_TAG_ID,
	CALIB_SENSOR_DPF_FILT_FAC_SH0_TAG_ID,
	CALIB_SENSOR_DPF_FILT_FAC_SH1_TAG_ID,
	CALIB_SENSOR_DPF_FILT_FAC_MID_TAG_ID,
};


uint32_t calib_system_DPF_filter_demosaic_th_sub_tags[] = {
	CALIB_SENSOR_DPF_FILT_DEMOSAIC_TH_GAIN_TAG_ID,
	CALIB_SENSOR_DPF_FILT_DEMOSAIC_TH_LEVEL_TAG_ID,
};


uint32_t calib_system_DPF_filter_demosaic_lp_sub_tags[] = {
	CALIB_SENSOR_DPF_LP_EN_TAG_ID,
	CALIB_SENSOR_DPF_LP_USE_OLD_VERSION_TAG_ID,
	CALIB_SENSOR_DPF_LP_LU_DIVIDED_TAG_ID,
	CALIB_SENSOR_DPF_LP_GAINSARRAY_TAG_ID,
	CALIB_SENSOR_DPF_LP_THH_DIVIDED0_TAG_ID,
	CALIB_SENSOR_DPF_LP_THH_DIVIDED1_TAG_ID,
	CALIB_SENSOR_DPF_LP_THH_DIVIDED2_TAG_ID,
	CALIB_SENSOR_DPF_LP_THH_DIVIDED3_TAG_ID,
	CALIB_SENSOR_DPF_LP_THH_DIVIDED4_TAG_ID,
	CALIB_SENSOR_DPF_LP_THCSC_DIVIDED0_TAG_ID,
	CALIB_SENSOR_DPF_LP_THCSC_DIVIDED1_TAG_ID,
	CALIB_SENSOR_DPF_LP_THCSC_DIVIDED2_TAG_ID,
	CALIB_SENSOR_DPF_LP_THCSC_DIVIDED3_TAG_ID,
	CALIB_SENSOR_DPF_LP_THCSC_DIVIDED4_TAG_ID,
	CALIB_SENSOR_DPF_LP_DIFF_DIVIDED0_TAG_ID,
	CALIB_SENSOR_DPF_LP_DIFF_DIVIDED1_TAG_ID,
	CALIB_SENSOR_DPF_LP_DIFF_DIVIDED2_TAG_ID,
	CALIB_SENSOR_DPF_LP_DIFF_DIVIDED3_TAG_ID,
	CALIB_SENSOR_DPF_LP_DIFF_DIVIDED4_TAG_ID,
	CALIB_SENSOR_DPF_LP_VARTH_DIVIDED0_TAG_ID,
	CALIB_SENSOR_DPF_LP_VARTH_DIVIDED1_TAG_ID,
	CALIB_SENSOR_DPF_LP_VARTH_DIVIDED2_TAG_ID,
	CALIB_SENSOR_DPF_LP_VARTH_DIVIDED3_TAG_ID,
	CALIB_SENSOR_DPF_LP_VARTH_DIVIDED4_TAG_ID,
	CALIB_SENSOR_DPF_LP_THGRAD_R_FCT_TAG_ID,
	CALIB_SENSOR_DPF_LP_THDIFF_R_FCT_TAG_ID,
	CALIB_SENSOR_DPF_LP_THVAR_R_FCT_TAG_ID,
	CALIB_SENSOR_DPF_LP_THGRAD_B_FCT_TAG_ID,
	CALIB_SENSOR_DPF_LP_THDIFF_B_FCT_TAG_ID,
	CALIB_SENSOR_DPF_LP_THVAR_B_FCT_TAG_ID,
	CALIB_SENSOR_DPF_LP_SIMILARITY_TH_TAG_ID,
	CALIB_SENSOR_DPF_LP_TH_VAR_EN_TAG_ID,
	CALIB_SENSOR_DPF_LP_TH_CSC_EN_TAG_ID,
	CALIB_SENSOR_DPF_LP_TH_DIFF_EN_TAG_ID,
	CALIB_SENSOR_DPF_LP_TH_GRAD_EN_TAG_ID,
	CALIB_SENSOR_DPF_LP_TH_GRAD_TAG_ID,
	CALIB_SENSOR_DPF_LP_TH_VAR_TAG_ID,
	CALIB_SENSOR_DPF_LP_TH_DIFF_TAG_ID,
	CALIB_SENSOR_DPF_LP_TH_CSC_TAG_ID,
	CALIB_SENSOR_DPF_LP_FLAT_LEVEL_SEL_TAG_ID,
	CALIB_SENSOR_DPF_LP_PATTERN_LEVEL_SEL_TAG_ID,
	CALIB_SENSOR_DPF_LP_EDGE_LEVEL_SEL_TAG_ID,
	CALIB_SENSOR_DPF_LP_RB_FILTER_EN_TAG_ID,
	CALIB_SENSOR_DPF_LP_HP_FILTER_EN_TAG_ID,
};

uint32_t calib_system_DPF_DSP_3DNR_sub_tags[] = {
	CALIB_SENSOR_DSP_3DNR_SETTING_NAME_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_ENABLE_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_GAIN_LEVEL_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_NOISE_COEF_NUMERATOR_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_NOISE_COEF_DENOMINATOR_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LEVEL_SETTING_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_SETTING_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_SETTING_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SHP_SETTING_TAG_ID,

};

uint32_t calib_system_DPF_DSP_3DNR_levle_setting_sub_tags[] = {
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_SP_NR_EN_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_SP_NR_LEVEL_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_TE_NR_EN_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_TE_NR_LEVEL_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_SP_NR_EN_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_SP_NR_LEVEL_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_TE_NR_EN_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_TE_NR_LEVEL_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SHP_EN_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SHP_LEVEL_TAG_ID,

};

uint32_t calib_system_DPF_DSP_3DNR_luma_setting_sub_tags[] = {
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_DEFAULT_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_SP_RAD_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_TE_MAX_BI_NUM_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W00_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W01_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W02_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W03_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W04_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W10_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W11_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W12_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W13_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W14_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W20_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W21_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W22_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W23_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W24_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W30_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W31_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W32_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W33_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W34_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W40_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W41_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W42_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W43_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W44_TAG_ID,
};

uint32_t calib_system_DPF_DSP_3DNR_chrm_setting_sub_tags[] = {
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_DEFAULT_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_SP_RAD_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_TE_MAX_BI_NUM_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W00_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W01_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W02_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W03_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W04_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W10_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W11_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W12_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W13_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W14_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W20_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W21_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W22_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W23_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W24_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W30_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W31_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W32_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W33_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W34_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W40_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W41_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W42_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W43_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W44_TAG_ID,

};

uint32_t calib_system_DPF_DSP_3DNR_sharp_setting_sub_tags[] = {
	CALIB_SENSOR_DSP_3DNR_SETTING_SHP_DEFAULT_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_THR_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_DIV_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_L_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_C_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W00_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W01_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W02_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W03_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W04_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W10_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W11_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W12_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W13_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W14_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W20_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W21_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W22_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W23_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W24_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W30_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W31_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W32_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W33_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W34_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W40_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W41_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W42_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W43_TAG_ID,
	CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W44_TAG_ID,
};


uint32_t calib_system_DPF_DSP_NEW_3DNR_sub_tags[] = {
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_NAME_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_3DNR_ENABLE_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_DPC_ENABLE_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_GAIN_LEVEL_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_YNR_SETTING_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_UVNR_SETTING_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_SHARP_SETTING_TAG_ID,
};

uint32_t calib_system_DPF_DSP_NEW_3DNR_YNR_setting_sub_tags[] = {
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_YNR_ENABLE_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_TNR_ENABLE_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_IIR_ENABLE_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_YNR_TIME_LEVEL_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_YNR_SPACE_LEVEL_TAG_ID,
};

uint32_t calib_system_DPF_DSP_NEW_3DNR_UVNR_setting_sub_tags[] = {
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_UVNR_ENABLE_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_UVNR_LEVEL_TAG_ID,
};

uint32_t calib_system_DPF_DSP_NEW_3DNR_sharp_setting_sub_tags[] = {
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_SHARP_ENABLE_TAG_ID,
	CALIB_SENSOR_NEW_DSP_3DNR_SETTING_SHARP_LEVEL_TAG_ID,
};



uint32_t calib_sensor_dpcc_sub_tags[] = {
	CALIB_SENSOR_DPCC_NAME_TAG_ID,
	CALIB_SENSOR_DPCC_RESOLUTION_TAG_ID,
	CALIB_SENSOR_DPCC_REGISTER_TAG_ID,
};

uint32_t calib_sensor_dpcc_register_sub_tags[] = {
	CALIB_SENSOR_DPCC_REGISTER_NAME_TAG_ID,
	CALIB_SENSOR_DPCC_REGISTER_VALUE_TAG_ID,
};


uint32_t calib_sensor_ie_sharpen_sub_tags[] = {
	CALIB_SENSOR_IESHARPEN_NAME_TAG_ID,
	CALIB_SENSOR_IESHARPEN_RESOLUTION_TAG_ID,
	CALIB_SENSOR_IESHARPEN_ENABLE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_CORING_THR_TAG_ID,
	CALIB_SENSOR_IESHARPEN_FULL_RANGE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_SWITCH_AVG_TAG_ID,
	CALIB_SENSOR_IESHARPEN_YAVG_THR_TAG_ID,
	CALIB_SENSOR_IESHARPEN_P_DELTA1_TAG_ID,
	CALIB_SENSOR_IESHARPEN_P_DELTA2_TAG_ID,
	CALIB_SENSOR_IESHARPEN_P_MAX_NUMBER_TAG_ID,
	CALIB_SENSOR_IESHARPEN_P_MIN_NUMBER_TAG_ID,
	CALIB_SENSOR_IESHARPEN_GAUSS_FLAT_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_GAUSS_NOISE_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_GAUSS_OTHER_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_L_P_GRAD_TAG_ID,
	CALIB_SENSOR_IESHARPEN_L_SHARP_FACTOR_TAG_ID,
	CALIB_SENSOR_IESHARPEN_L_LINE1_FILTER_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_L_LINE2_FILTER_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_L_LINE3_FILTER_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_H_P_GRAD_TAG_ID,
	CALIB_SENSOR_IESHARPEN_H_SHARP_FACTOR_TAG_ID,
	CALIB_SENSOR_IESHARPEN_H_LINE1_FILTER_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_H_LINE2_FILTER_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_H_LINE3_FILTER_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_UV_GAUSS_FLAT_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_UV_GAUSS_NOISE_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_UV_GAUSS_OTHER_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_GAIN_DVIDE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_L_LAP_MAT_COE_TAG_ID,
	CALIB_SENSOR_IESHARPEN_H_LAP_MAT_COE_TAG_ID,

};


uint32_t calib_sensor_cproc_sub_tags[] = {
	CALIB_SENSOR_CPROC_NAME_TAG_ID,
	CALIB_SENSOR_CPROC_SATURATION_TAG_ID,
	CALIB_SENSOR_CPROC_CONTRAST_TAG_ID,
	CALIB_SENSOR_CPROC_BRIGHTNESS_TAG_ID,
	CALIB_SENSOR_CPROC_HUE_TAG_ID,

};

uint32_t calib_sensor_otp_sub_tags[] = {
	CALIB_SENSOR_OTP_AWB_ENABLE_TAG_ID,
	CALIB_SENSOR_OTP_AWB_GOLDEN_R_VALUE_TAG_ID,
	CALIB_SENSOR_OTP_AWB_GOLDEN_GR_VALUE_TAG_ID,
	CALIB_SENSOR_OTP_AWB_GOLDEN_GB_VALUE_TAG_ID,
	CALIB_SENSOR_OTP_AWB_GOLDEN_B_VALUE_TAG_ID,
	CALIB_SENSOR_OTP_LSC_ENABLE_TAG_ID,
};


uint32_t calib_system_sub_tags[] = {
	CALIB_SYSTEM_AFPS_TAG_ID,


};

uint32_t calib_system_AFPS_sub_tags[] = {
	CALIB_SYSTEM_AFPS_DEFAULT_TAG_ID,

};


// TODO: list all tag infos
calib_tag_info_t g_calib_tag_infos[CALIB_IQ_TAG_END] = {
    [CALIB_FILESTART_TAG_ID]    =
        {"matfile", CALIB_TAG_TYPE_UNKNOWN, {-1, -1},
          check_tags_array_info(calib_filestart_sub_tags), NULL},
    [CALIB_CELL_TAG_ID]         =
        {"cell", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_ignore, NULL},

	//header
    [CALIB_HEADER_TAG_ID]	    =
    	{"header", CALIB_TAG_TYPE_STRUCT, {-1, -1},
    	  check_tags_array_info(calib_header_sub_tags), NULL},
	[CALIB_HEADER_CREATION_DATE_TAG_ID]         =
        {"creation_date", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_CREATOR_TAG_ID]         =
        {"creator", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_SENSOR_NAME_TAG_ID]         =
        {"sensor_name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_SAMPLE_NAME_TAG_ID]         =
        {"sample_name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_GENERATOR_VERSION_TAG_ID]         =
        {"generator_version", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_CODE_XML_PARSE_VERSION_TAG_ID]         =
        {"code_xml_parse_version", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_ISP_OUTPUT_TYPE_TAG_ID]         =
        {"isp_output_type", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_SDK_IQ_VERIFY_ID]         =
        {"sdk_IQfile_Verify", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_XML_MAGIC_VERSION_CODE_ID]         =
        {"magic_code_version", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//resolution
    [CALIB_HEADER_RESOLUTION_TAG_ID]	    =
    	{"resolution", CALIB_TAG_TYPE_CELL, {-1, -1},
    	  check_tags_array_info(calib_header_resolution_sub_tags), NULL},
   	[CALIB_HEADER_RESOLUTION_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_RESOLUTION_ID_TAG_ID]         =
        {"id", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_RESOLUTION_WIDTH_TAG_ID]         =
        {"width", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_RESOLUTION_HEIGHT_TAG_ID]         =
        {"height", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//framrate
    [CALIB_HEADER_RESOLUTION_FRATE_TAG_ID]         =
        {"framerate", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_header_resolution_framerate_sub_tags), NULL},
    [CALIB_HEADER_RESOLUTION_FRATE_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
    [CALIB_HEADER_RESOLUTION_FRATE_FPS_TAG_ID]         =
        {"fps", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//sensor
	[CALIB_SENSOR_TAG_ID]         =
        {"sensor", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_sub_tags), NULL},

	//awb
	[CALIB_SENSOR_AWB_TAG_ID]         =
        {"AWB", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_awb_sub_tags), NULL},
    [CALIB_SENSOR_AWB_VALID_VERSION_NAME_TAG_ID]         =
        {"valid_version_name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},

	//awb v10
    [CALIB_SENSOR_AWB_VERSION_10_TAG_ID]         =
        {"version_10_para", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v10_sub_tags), NULL},

	//awb v10 golbal
    [CALIB_SENSOR_AWB_V10_GLOBALS_TAG_ID]         =
        {"globals", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v10_global_sub_tags), NULL},
	 [CALIB_SENSOR_AWB_V10_GLOBALS_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RESOLUTION_TAG_ID]         =
        {"resolution", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_SVDMEANVALUE_TAG_ID]         =
        {"SVDMeanValue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V10_GLOBALS_PCAMATRIX_TAG_ID]         =
        {"PCAMatrix", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_CENTERLINE_TAG_ID]         =
        {"CenterLine", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RG2_TAG_ID]         =
        {"afRg2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V10_GLOBALS_MAXDIST2_TAG_ID]         =
        {"afMaxDist2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RG1_TAG_ID]         =
        {"afRg1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_MAXDIST1_TAG_ID]         =
        {"afMaxDist1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALFADE2_TAG_ID]         =
        {"afGlobalFade2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALGAINDIST2_TAG_ID]         =
        {"afGlobalGainDistance2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALFADE1_TAG_ID]         =
        {"afGlobalFade1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_GLOBALGAINDIST1_TAG_ID]         =
        {"afGlobalGainDistance1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_KFACTOR_TAG_ID]         =
        {"K_Factor", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_FADE2_TAG_ID]         =
        {"afFade2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	[CALIB_SENSOR_AWB_V10_GLOBALS_CB_MIN_REGIONMAX_TAG_ID]         =
        {"afCbMinRegionMax", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_CR_MIN_REGIONMAX_TAG_ID]         =
        {"afCrMinRegionMax", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_MAX_CSUM_REGIONMAX_TAG_ID]         =
        {"afMaxCSumRegionMax", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V10_GLOBALS_CB_MIN_REGIONMIN_TAG_ID]         =
        {"afCbMinRegionMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_CR_MIN_REGIONMIN_TAG_ID]         =
        {"afCrMinRegionMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_MAX_CSUM_REGIONMIN_TAG_ID]         =
        {"afMaxCSumRegionMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V10_GLOBALS_MINC_REGIONMAX_TAG_ID]         =
        {"afMinCRegionMax", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_MAXY_REGIONMAX_TAG_ID]         =
        {"afMaxYRegionMax", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_MINY_MAXG_REGIONMAX_TAG_ID]         =
        {"afMinYMaxGRegionMax", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_MINC_REGIONMIN_TAG_ID]         =
        {"afMinCRegionMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_MAXY_REGIONMIN_TAG_ID]         =
        {"afMaxYRegionMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_MINY_MAXG_REGIONMIN_TAG_ID]         =
        {"afMinYMaxGRegionMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_REFCB_TAG_ID]         =
        {"afRefCb", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_REFCR_TAG_ID]         =
        {"afRefCr", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	[CALIB_SENSOR_AWB_V10_GLOBALS_REGION_SIZE_ID]         =
        {"RegionSize", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	[CALIB_SENSOR_AWB_V10_GLOBALS_REGION_SIZE_INC_ID]         =
        {"RegionSizeInc", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_REGION_SIZE_DEC_ID]         =
        {"RegionSizeDec", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_INDOOR_MIN_TAG_ID]         =
        {"fRgProjIndoorMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_MAX_TAG_ID]         =
        {"fRgProjMax", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_MAX_SKY_TAG_ID]         =
        {"fRgProjMaxSky", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_OUTDOOR_MIN_TAG_ID]         =
        {"fRgProjOutdoorMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_YELLOW_LIMIT_ENABLE_ID]         =
        {"fRgProjYellowLimitEnable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_A_LIMIT_ID]         =
        {"fRgProjALimit", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_A_WEIGHT_ID]         =
        {"fRgProjAWeight", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_YELLOW_LIMIT_ID]         =
        {"fRgProjYellowLimit", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_ILL_TO_CWF_ENABLE_ID]         =
        {"fRgProjIllToCwfEnable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_ILL_TO_CWF_ID]         =
        {"fRgProjIllToCwf", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_RGPROJ_ILL_TO_CWF_WEIGHT_ID]         =
        {"fRgProjIllToCwfWeight", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_CLIP_OUTDOOR_ID]         =
        {"awb_clip_outdoor", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},

	//awb IIR
	 [CALIB_SENSOR_AWB_V10_GLOBALS_IIR_ID]         =
        {"IIR", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v10_IIR_sub_tags), NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMP_COEF_ADD_TAG_ID]         =
        {"DampCoefAdd", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMP_COEF_SUB_TAG_ID]         =
        {"DampCoefSub", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	[CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMP_FILTER_THRESHOLD_TAG_ID]         =
        {"DampFilterThreshold", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMPING_COEF_MIN_TAG_ID]         =
        {"DampingCoefMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMPING_COEF_MAX_TAG_ID]         =
        {"DampingCoefMax", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V10_GLOBALS_IIR_DAMPING_COEF_INIT_TAG_ID]         =
        {"DampingCoefInit", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_IIR_EXP_PRIOR_FILTER_SIZE_MAX_TAG_ID]         =
        {"ExpPriorFilterSizeMax", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_GLOBALS_IIR_EXP_PRIOR_FILTER_SIZE_MIN_TAG_ID]         =
        {"ExpPriorFilterSizeMin", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V10_GLOBALS_IIR_EXP_PRIOR_MIDDLE_TAG_ID]         =
        {"ExpPriorMiddle", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//awb v10 ILLUMINATION

	[CALIB_SENSOR_AWB_V10_ILLUMINATION_TAG_ID]		   =
		{"illumination", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_info(calib_sensor_awb_v10_iilumination_sub_tags), NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_DOOR_TYPE_TAG_ID]         =
        {"doorType", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},

	//GMM
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_TAG_ID]         =
        {"GMM", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v10_iilumination_GMM_sub_tags), NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_INV_COV_MATRIX_TAG_ID]         =
        {"invCovMatrix", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_GAUSSIAN_SFACTOR_TAG_ID]         =
        {"GaussianScalingFactor", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_GAUSSIAN_MVALUE_TAG_ID]         =
        {"GaussianMeanValue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_GMM_TAU_TAG_ID]         =
        {"tau", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//ALSC
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_ALSC_TAG_ID]         =
        {"aLSC", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v10_iilumination_ALSC_sub_tags), NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_ALSC_RES_TAG_ID]         =
        {"resolution", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_ALSC_RES_LSC_PROFILE_LIST_TAG_ID]         =
        {"LSC_PROFILE_LIST", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},

	//MANUAL
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_MANUAL_WB_TAG_ID]         =
        {"manualWB", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	[CALIB_SENSOR_AWB_V10_ILLUMINATION_MANUAL_CC_TAG_ID]         =
        {"manualccMatrix", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_MANUAL_CTO_TAG_ID]         =
        {"manualccOffsets", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_AWB_TYPE_TAG_ID]         =
        {"awbType", CALIB_TAG_TYPE_CHAR, {-1, -1},
			check_tags_array_ignore, NULL},

	//SAT
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_SAT_CT_TAG_ID]         =
        {"sat_CT", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v10_iilumination_SAT_sub_tags), NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_SAT_CT_GAIN_TAG_ID]         =
        {"gains", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_SAT_CT_SAT_TAG_ID]         =
        {"sat", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//VIG
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_VIG_CT_TAG_ID]         =
        {"vig_CT", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v10_iilumination_VIG_sub_tags), NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_VIG_CT_GAIN_TAG_ID]         =
        {"gains", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	[CALIB_SENSOR_AWB_V10_ILLUMINATION_VIG_CT_VIG_TAG_ID]         =
        {"vig", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//ACC
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_ACC_TAG_ID]         =
        {"aCC", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v10_iilumination_aCC_sub_tags), NULL},
     [CALIB_SENSOR_AWB_V10_ILLUMINATION_ACC_CC_PROFILE_LIST_TAG_ID]         =
        {"CC_PROFILE_LIST", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},

	//awb v11 global
	 [CALIB_SENSOR_AWB_VERSION_11_TAG_ID]         =
        {"version_11_para", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v11_sub_tags), NULL},
     [CALIB_SENSOR_AWB_V11_GLOBALS_TAG_ID]         =
        {"globals", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v11_global_sub_tags), NULL},
	 [CALIB_SENSOR_AWB_V11_GLOBALS_GAIN_CLIP_ENABLE_TAG_ID]         =
        {"afWBGainClipEnable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V11_GLOBALS_MAX_CSUM_BR_TAG_ID]         =
        {"afmaxCSum_br", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V11_GLOBALS_MAX_CSUM_SR_TAG_ID]         =
        {"afmaxCSum_sr", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V11_GLOBALS_MINC_BR_TAG_ID]         =
        {"afminC_br", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V11_GLOBALS_MAXY_BR_TAG_ID]         =
        {"afMaxY_br", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V11_GLOBALS_MINY_BR_TAG_ID]         =
        {"afMinY_br", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_V11_GLOBALS_MINC_SR_TAG_ID]         =
        {"afminC_sr", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V11_GLOBALS_MAXY_SR_TAG_ID]         =
        {"afMaxY_sr", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_V11_GLOBALS_MINY_SR_TAG_ID]         =
        {"afMinY_sr", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//awb v11 ILLumination
     [CALIB_SENSOR_AWB_V11_ILLUMINATION_TAG_ID]         =
        {"illumination", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_sensor_awb_v11_iilumination_sub_tags), NULL},
	 [CALIB_SENSOR_AWB_V11_ILLUMINATION_REFERENCE_GAIN_TAG_ID]         =
        {"referenceWBgain", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

    //flash
     [CALIB_SENSOR_AWB_FLASH_PARA_TAG_ID]         =
        {"flash_para", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_awb_flash_para_sub_tags), NULL},
     [CALIB_SENSOR_AWB_FLASH_FLASHTYPE_TAG_ID]         =
        {"FlashType", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_LVVALUES_TAG_ID]         =
        {"LvValues", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_PREFLASHWEIGHTS1_TAG_ID]         =
        {"PreFlshWeighs1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AWB_FLASH_LVFLASHTH1_TAG_ID]         =
        {"LvFlashTh1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_LVVALRATIO_TAG_ID]         =
        {"LvValRatio", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_PREFLASHWEIGHTS2_TAG_ID]         =
        {"PreFlshWeighs2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_LVFLASHTH2_TAG_ID]		   =
        {"LvFlashTh2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_LVVALRATIO3_TAG_ID]		   =
        {"LvValRatio3", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_MAINFLASHWEIGHTS_TAG_ID]		 =
       {"MainFlshWeighs", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_LVVALUEIIRSIZE_TAG_ID]         =
        {"LvValueIIRSize", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_DAMPFACTOR_TAG_ID]         =
        {"Dampfactor", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_AWB_FLASH_AECCONVERGETH_TAG_ID]         =
        {"AeConvergeTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	//lsc
	 [CALIB_SENSOR_LSC_TAG_ID]         =
        {"LSC", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_sensor_lsc_sub_tags), NULL},
     [CALIB_SENSOR_LSC_PROFILE_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LSC_PROFILE_RESOLUTION_TAG_ID]         =
        {"resolution", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_LSC_PROFILE_ILLUMINATION_TAG_ID]         =
        {"illumination", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LSC_PROFILE_LSC_SECTORS_TAG_ID]         =
        {"LSC_sectors", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_LSC_PROFILE_LSC_NO_TAG_ID]         =
        {"LSC_No", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LSC_PROFILE_LSC_XO_TAG_ID]         =
        {"LSC_Xo", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LSC_PROFILE_LSC_YO_TAG_ID]         =
        {"LSC_Yo", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_LSC_PROFILE_LSC_SECTOR_SIZE_X_TAG_ID]         =
        {"LSC_SECT_SIZE_X", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LSC_PROFILE_LSC_SECTOR_SIZE_Y_TAG_ID]         =
        {"LSC_SECT_SIZE_Y", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_LSC_PROFILE_LSC_VIGNETTING_TAG_ID]         =
        {"vignetting", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LSC_PROFILE_LSC_SAMPLES_RED_TAG_ID]		  =
		{"LSC_SAMPLES_red", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LSC_PROFILE_LSC_SAMPLES_GREENR_TAG_ID]		   =
		{"LSC_SAMPLES_greenR", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LSC_PROFILE_LSC_SAMPLES_GREENB_TAG_ID]		   =
		{"LSC_SAMPLES_greenB", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LSC_PROFILE_LSC_SAMPLES_BLUE_TAG_ID]		   =
		{"LSC_SAMPLES_blue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},



	 //CC
	 [CALIB_SENSOR_CC_TAG_ID]		   =
		{"CC", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_info(calib_sensor_cc_sub_tags), NULL},
	 [CALIB_SENSOR_CC_PROFILE_NAME_TAG_ID]		  =
		{"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_CC_PROFILE_SATURATION_TAG_ID]		   =
		{"saturation", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_CC_PROFILE_CC_MATRIX_TAG_ID]		   =
		{"ccMatrix", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_CC_PROFILE_CC_OFFSETS_TAG_ID]		   =
		{"ccOffsets", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_CC_PROFILE_WB_TAG_ID]		   =
		{"wb", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},



	//AF
	 [CALIB_SENSOR_AF_TAG_ID]		   =
		{"AF", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_af_sub_tags), NULL},
	 [CALIB_SENSOR_AF_WINDOW_NUM_TAG_ID]		  =
		{"WindowNum", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_WINDOW_A_TAG_ID]		   =
		{"WindowA", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_af_windowA_sub_tags), NULL},
	 [CALIB_SENSOR_AF_WINDOW_B_TAG_ID]		   =
		{"WindowB", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_af_windowB_sub_tags), NULL},
	 [CALIB_SENSOR_AF_WINDOW_C_TAG_ID]		   =
		{"WindowC", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_af_windowC_sub_tags), NULL},
	 [CALIB_SENSOR_AF_CONTRAST_AF_TAG_ID]		   =
		{"contrast_af", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_af_contrastAf_sub_tags), NULL},
	 [CALIB_SENSOR_AF_LASER_AF_TAG_ID]		   =
		{"laser_af", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_af_laserAF_sub_tags), NULL},
	 [CALIB_SENSOR_AF_PDAF_TAG_ID]		  =
		{"pdaf", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_af_pdAF_sub_tags), NULL},

	//af WINDOW
    [CALIB_SENSOR_AF_H_OFFS_TAG_ID] 		  =
	   {"h_offs", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_AF_V_OFFS_TAG_ID]		 =
	   {"v_offs", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_AF_H_SIZE_TAG_ID]		  =
	   {"h_size", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_AF_V_SIZE_TAG_ID] 		  =
	   {"v_size", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		 check_tags_array_ignore, NULL},

   //contrast af
   	 [CALIB_SENSOR_AF_CONTRAST_ENABLE_TAG_ID]		   =
		{"enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_SEARCH_STRATEGY_TAG_ID]		  =
		{"AfSearchStrategy", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_FULL_DIR_TAG_ID]		   =
		{"FullDir", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_FULL_RANGE_TBL_TAG_ID]		   =
		{"FullRangeTbl", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_ADAPTIVE_DIR_TAG_ID]		   =
		{"AdaptiveDir", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_ADAPTIVE_RANGE_TBL_TAG_ID]		   =
		{"AdaptRangeTbl", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_TRIG_THERS_TAG_ID]		   =
		{"TrigThers", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_TRIG_VALUE_TAG_ID]		  =
		{"TrigValue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_TRIG_FRAMES_TAG_ID]		   =
		{"TrigFrames", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_TRIG_ANTI_FLASH_TAG_ID]		   =
		{"TrigAntiFlash", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_FINISH_THERS_MAIN_TAG_ID]		   =
		{"FinishThersMain", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_FINISH_THERS_SUB_TAG_ID]		   =
		{"FinishThersSub", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_FINISH_THERS_OFFSET_TAG_ID]		   =
		{"FinishThersOffset", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_STABLE_THERS_TAG_ID]		   =
		{"StableThers", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_STABLE_VALUE_TAG_ID]		   =
		{"StableValue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_STABLE_FRAMES_TAG_ID]		  =
		{"StableFrames", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_STABLE_TIME_TAG_ID]		   =
		{"StableTime", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_OUT_FOCUS_VALUE_TAG_ID]		   =
		{"OutFocusValue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_OUT_FOCUS_LUMA_TAG_ID]		   =
		{"OutFocusLuma", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_OUT_FOCUS_POS_TAG_ID]		   =
		{"OutFocusPos", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	//laser af
	 [CALIB_SENSOR_AF_LASERAF_ENABLE_TAG_ID]		   =
		{"enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_LASER_AF_VCMDOT_TAG_ID]		  =
		{"vcmDot", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AF_LASER_AF_DISTANCEDOT_TAG_ID]		   =
		{"distanceDot", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	//pdaf
	 [CALIB_SENSOR_AF_PDAF_ENABLE_TAG_ID]		   =
		{"enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},


	 //aec
	 [CALIB_SENSOR_AEC_TAG_ID]		   =
		{"AEC", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_SETPOINT_TAG_ID]		   =
		{"SetPoint", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NIGHT_SETPOINT_TAG_ID]		   =
		{"NightSetpoint", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_CLM_TOLERANCE_TAG_ID]		  =
		{"ClmTolerance", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DAMP_OVER_TAG_ID]		   =
		{"DampOver", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DAMP_UNDER_TAG_ID]		   =
		{"DampUnder", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DAMP_OVER_VIDEO_TAG_ID]		  =
		{"DampOverVideo", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DAMP_UNDER_VIDEO_TAG_ID]		   =
		{"DampUnderVideo", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_AFPS_MAX_GAIN_TAG_ID]		   =
		{"aFpsMaxGain", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//ecm
	 [CALIB_SENSOR_AEC_ECM_TAG_ID]		   =
		{"ECM", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_ecm_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_ECM_NAME_TAG_ID]		   =
		{"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_ECM_SCHEMES_TAG_ID]		   =
		{"PrioritySchemes", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_ecm_schem_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_ECM_SCHEME_NAME_TAG_ID]		  =
		{"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_ECM_SCHEME_OFFSETT0FAC_TAG_ID]		   =
		{"OffsetT0Fac", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_ECM_SCHEME_SLOPEA0_TAG_ID]		   =
		{"SlopeA0", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//time range gian range
	 [CALIB_SENSOR_AEC_GAINRANGE_TAG_ID]		   =
		{"GainRange", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_GRIDWEIGHTS_TAG_ID]		   =
		{"GridWeights", CALIB_TAG_TYPE_DOUBLE, {9, 9},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NIHGT_GRIDWEIGHTS_TAG_ID]		  =
		{"NightGridWeights", CALIB_TAG_TYPE_DOUBLE, {9, 9},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_TIMEFACTOR_TAG_ID]		   =
		{"TimeFactor", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_CAMERICISPHISTMODE_TAG_ID]		   =
		{"CamerIcIspHistMode", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_CAMERICISPEXPMEASURINGMODE_TAG_ID]		   =
		{"CamerIcIspExpMeasuringMode", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},


	//dynamic setpoint
	 [CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_TAG_ID]		   =
		{"DynamicSetpoint", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_dynamic_setpoint_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_NAME_TAG_ID]		   =
		{"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_ENABLE_TAG_ID]		   =
		{"Enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_EXPVALUE_TAG_ID]		   =
		{"ExposueValue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_DYSETPOINT_TAG_ID]		  =
		{"DySetpoint", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DYNAMIC_SETPOINT_FILTER_FAC_TAG_ID]		  =
		{"filter_fac", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//exposure separate
	 [CALIB_SENSOR_AEC_EXP_SEPARATE_TAG_ID]		   =
		{"ExposureSeparate", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_exposure_separate_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_EXP_SEPARATE_NAME_TAG_ID]		   =
		{"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_EXP_SEPARATE_TIMEDOT_TAG_ID]		   =
		{"TimeDot", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_EXP_SEPARATE_GAINDOT_TAG_ID]		   =
		{"GainDot", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_EXP_SEPARATE_LTIMEDOT_TAG_ID]		   =
		{"LTimeDot", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_EXP_SEPARATE_STIMEDOT_TAG_ID]		  =
		{"STimeDot", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_EXP_SEPARATE_LGAINDOT_TAG_ID]		   =
		{"LGainDot", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_EXP_SEPARATE_SGAINDOT_TAG_ID]		   =
		{"SGainDot", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//aec  fps set config
	 [CALIB_SENSOR_AEC_FPS_FPS_SET_CONFIG_TAG_ID]		   =
		{"FpsSetConfig", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_fps_set_config_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_FPS_FPS_SET_ENABLE_TAG_ID]		   =
		{"FpsSet_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_FPS_IS_FPS_FIX_TAG_ID]		   =
		{"isFpsFix", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_FPS_FPS_FIX_TIMEDOT_TAG_ID]		   =
		{"FpsFix_TimeDot", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//AEC_INTERVAL_ADJUST_STRATEGY
	 [CALIB_SENSOR_AEC_INTERVAL_ADJUST_STRATEGY_TAG_ID]		   =
		{"AEC_Interval_Adjust_Strategy", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_interval_adjust_strategy_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_INTERVAL_ADJUST_ENABLE_TAG_ID]		   =
		{"enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_INTERVAL_ADJUST_DLUMA_HIGH_TH_TAG_ID]		   =
		{"dLuma_high_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_INTERVAL_ADJUST_DLUMA_LOW_TH_TAG_ID]		   =
		{"dLuma_low_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_INTERVAL_ADJUST_TRIGGER_FRAME_TAG_ID]		   =
		{"adjust_trigger_frame", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//AOE
	 [CALIB_SENSOR_AEC_AOE_ENABLE_TAG_ID]		   =
		{"AOE_Enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_AOE_MAX_POINT_TAG_ID]		   =
		{"AOE_Max_point", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_AOE_MIN_POINT_TAG_ID]		   =
		{"AOE_Min_point", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_AOE_Y_MAX_TH_TAG_ID]		   =
		{"AOE_Y_Max_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_AOE_Y_MIN_TH_TAG_ID]		   =
		{"AOE_Y_Min_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_AOE_STEP_INC_TAG_ID]		  =
		{"AOE_Step_Inc", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_AOE_STEP_DEC_TAG_ID]		   =
		{"AOE_Step_Dec", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//DON
	 [CALIB_SENSOR_AEC_DON_TAG_ID]		   =
		{"DON", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_DON_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_DON_NIGHT_TRIGGER_TAG_ID]		   =
		{"NightTrigger", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DON_NIGHT_MODE_TAG_ID]		   =
		{"NightMode", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DON_DAY2NIGHT_FAC_TH_TAG_ID]		   =
		{"DON_Day2Night_Fac_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DON_NIGHT2DAY_FAC_TH_TAG_ID]		   =
		{"DON_Night2Day_Fac_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_DON_BOUNCING_TH_TAG_ID]		  =
		{"DON_Bouncing_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//NLSC
	 [CALIB_SENSOR_AEC_NLSC_CONFIG_TAG_ID]		   =
		{"NLSC_Config", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_NLSC_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_NLSC_ENABLE_TAG_ID]		   =
		{"Enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NLSC_IR_RG_TAG_ID]		   =
		{"IR_rg", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NLSC_IR_BG_TAG_ID]		   =
		{"IR_bg", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NLSC_MAX_DIS_TAG_ID]		   =
		{"Max_Dis", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NLSC_COLOR2BLACK_COUNT_TAG_ID]		  =
		{"Color2Black_count", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NLSC_COLOR2BLACK_THRESH_TAG_ID]		   =
		{"Color2Black_thresh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NLSC_BLACK2COLOR_COUNT_TAG_ID]		   =
		{"Black2Color_count", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NLSC_BLACK2COLOR_THRESH_TAG_ID]		   =
		{"Black2Color_thresh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NLSC_BLACK2COLOR_VB_PERCENT_TAG_ID]		   =
		{"Black2Color_vb_percent", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_NLSC_COLOR2BLACK_STABLE_FPS_TAG_ID]		   =
		{"Color2Black_stable_fps", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//backlight
	 [CALIB_SENSOR_AEC_BACKLIGHT_CONFIG_TAG_ID]		   =
		{"BackLight_Config", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_backlight_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_ENABLE_TAG_ID]		   =
		{"Enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_MODE_TAG_ID]		   =
		{"Mode", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},

	 //backlight-weight-method
	 [CALIB_SENSOR_AEC_BACKLIGHT_WEIGHT_METHOD_TAG_ID]		   =
		{"WeightMethod", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_backlight_weight_method_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_LUMALOWTH_TAG_ID]		   =
		{"LumaLowTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_LUMAHIGHTH_TAG_ID]		   =
		{"LumaHighTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_LVTH_TAG_ID]		   =
		{"LvTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_WEIGHTMINTH_TAG_ID]		   =
		{"WeightMinTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_WEIGHTMAXTH_TAG_ID]		  =
		{"WeightMaxTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	 //backlight-darkroi-method
	 [CALIB_SENSOR_AEC_BACKLIGHT_DARKROI_METHOD_TAG_ID]	  	  =
		{"DarkROIMethod", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_backlight_darkroi_method_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_OEROI_LOWTH_TAG_ID]		  =
		{"OEROILowTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_LV_LOWTH_TAG_ID]		  =
		{"LvLowTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_LV_HIGHTH_TAG_ID]		  =
		{"LvHighTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_EXPLEVEL_TAG_ID]		  =
		{"ExpLevel", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_NONOEPDF_HIGHTH_TAG_ID]		  =
		{"NonOEPdfHighTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_DARKPDF_HIGHTH_TAG_ID]		  	  =
		{"DarkPdfHighTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_BACKLIGHT_DYLOCALSETPOINT_TAG_ID]		  =
		{"DyLocalSetPoint", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//hist 2 hal
	 [CALIB_SENSOR_AEC_HIST_2_HAL_TAG_ID]		   =
		{"Hist_2_hal", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_hist2hal_sub_tags), NULL},
	 [CALIB_SENSOR_AEC_HIST_2_HAL_ENABLE_TAG_ID]		   =
		{"Enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_AEC_HIST_2_HAL_LOWHISTBINTH_TAG_ID]		   =
		{"LowHistBinTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//lock ae
	 [CALIB_SENSOR_LOCK_AE_TAG_ID]		   =
		{"LockAE", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_lockAE_sub_tags), NULL},
	 [CALIB_SENSOR_LOCK_AE_ENABEL_TAG_ID]		   =
		{"LockAE_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LOCK_AE_GAINVALUE_TAG_ID]		   =
		{"GainValue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_LOCK_AE_TIMEVALUE_TAG_ID]		   =
		{"TimeValue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//hdr ae ctrl
	 [CALIB_SENSOR_HDRCTRL_TAG_ID]		   =
		{"HdrCtrl", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_HDRctrl_sub_tags), NULL},
	 [CALIB_SENSOR_HDRCTRL_ENABEL_TAG_ID]		   =
		{"Enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_MODE_TAG_ID]		   =
		{"Mode", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_FRAMENUM_TAG_ID]		  =
		{"FrameNum", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_DCG_Ratio_TAG_ID]		   =
		{"DCGRatio", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	// hdr aec ctrl --- Lframe ctrl
	 [CALIB_SENSOR_HDRCTRL_LFRAMECTRL_TAG_ID]		   =
		{"LframeCtrl", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_HDRctrl_LframeCtrl_sub_tags), NULL},
	 [CALIB_SENSOR_HDRCTRL_OEROI_LOWTH_TAG_ID]		   =
		{"OEROILowTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_LV_HIGHTH_TAG_ID]		   =
		{"LvHighTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_LV_LOWTH_TAG_ID]		   =
		{"LvLowTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_LEXPLEVEL_TAG_ID]		   =
		{"LExpLevel", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_LSETPOINT_TAG_ID]		   =
		{"LSetPoint", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_DARKLUMA_TAG_ID]		   =
		{"TargetDarkROILuma", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_NONOEPDF_TH_TAG_ID]		   =
		{"NonOEPdfTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_DARKPDF_TH_TAG_ID]		   =
		{"DarkPdfTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_M2S_Ratio_TAG_ID]		   =
		{"M2S_Ratio", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_L2M_Ratio_TAG_ID]		   =
		{"L2M_Ratio", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	 //Sframe ctrl
	 [CALIB_SENSOR_HDRCTRL_SFRAMECTRL_TAG_ID]		   =
		{"SframeCtrl", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_HDRctrl_SframeCtrl_sub_tags), NULL},
	 [CALIB_SENSOR_HDRCTRL_SEXPLEVEL_TAG_ID]		   =
		{"SExpLevel", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_OETOLERANCE_TAG_ID]		   =
		{"OETolerance", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_OELUMA_TAG_ID]		  =
		{"TargetOELuma", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_SSETPOINT_TAG_ID]		   =
		{"SSetPoint", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_HDRCTRL_OELUMADIST_TAG_ID]		   =
		{"OELumaDistTh", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	 [CALIB_SENSOR_FLASHCTRL_TAG_ID]		   =
		{"FlashCtrl", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_aec_flashctrl_sub_tags), NULL},
	 [CALIB_SENSOR_FLASHCTRL_FLASH_TRIGGER_TH_TAG_ID]		   =
		{"flash_trriger_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_CURRENT_PCT_TAG_ID]		   =
		{"preflash_current_pct", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_MAINFLASH_CURRENT_PCT_TAG_ID]		   =
		{"mainflash_current_pct", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_FLASHLIGHT_RATIO_TAG_ID]		   =
		{"flashlight_ratio", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_EN_TAG_ID]		   =
		{"preflash_startup_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_EXP_TAG_ID]		   =
		{"preflash_startup_exp", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_DIFFH_TAG_ID]		   =
		{"preflash_startup_diffH", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_DIFFL_TAG_ID]		   =
		{"preflash_startup_diffL", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_FACH_TAG_ID]		   =
		{"preflash_startup_facH", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_FACL_TAG_ID]		   =
		{"preflash_startup_facL", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_MEANLUMA_TH_TAG_ID]		   =
		{"preflash_startup_meanluma_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_STARTUP_AFFECT_LIMIT_TAG_ID]		   =
		{"preflash_startup_affect_limit", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_EXP_SEPARATE_MODE_TAG_ID]		   =
		{"exp_separate_mode", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_DUMP_OVERTGT_TAG_ID]		   =
		{"preflash_dump_overTgt", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_DUMP_UNDERTGT_TAG_ID]		   =
		{"preflash_dump_underTgt", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_DUMP_OVEREXP_TAG_ID]		   =
		{"preflash_dump_overExp", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_MEANLUMA_OE_THL_TAG_ID]		   =
		{"preflash_meanluma_OE_thL", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_FLASHCTRL_PREFLASH_MEANLUMA_OE_THH_TAG_ID]		   =
		{"preflash_meanluma_OE_thH", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},

	//bls
	 [CALIB_SENSOR_BLS_TAG_ID]		   =
		{"BLS", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_info(calib_sensor_bls_sub_tags), NULL},
	 [CALIB_SENSOR_BLS_NAME_TAG_ID]		   =
		{"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_BLS_RESOLUTION_TAG_ID]		   =
		{"resolution", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_BLS_DATA_TAG_ID]		   =
		{"blsData", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},


	//DEGAMMA
	[CALIB_SENSOR_DEGAMMA_TAG_ID]		   =
		{"DEGAMMA", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_ignore, NULL},

	//GOC
	 [CALIB_SENSOR_GOC_TAG_ID]		   =
		{"GOC", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_info(calib_sensor_goc_sub_tags), NULL},
	 [CALIB_SENSOR_GOC_NAME_TAG_ID]		   =
		{"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_GOC_ENABLE_MODE_TAG_ID]		   =
		{"enable_mode", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_GOC_DEF_CFG_MODE_TAG_ID]		   =
		{"def_cfg_mode", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_GOC_GAMMAY_TAG_ID]		  =
		{"gamma_y", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_GOC_WDRON_GAMMAY_TAG_ID]		   =
		{"wdron_gamma_y", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},



	//WDR
	[CALIB_SENSOR_WDR_TAG_ID]		  =
	   {"WDR", CALIB_TAG_TYPE_CELL, {-1, -1},
		 check_tags_array_info(calib_sensor_wdr_sub_tags), NULL},
	[CALIB_SENSOR_WDR_ENABLE_TAG_ID]		  =
	   {"enabled", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_WDR_MODE_TAG_ID]		  =
	   {"mode", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		 check_tags_array_ignore, NULL},

	[CALIB_SENSOR_WDR_TBD_TAG_ID]		  =
	   {"tbd", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_WDR_CURVE1_TAG_ID]		 =
	   {"curve1", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_WDR_CURVE2_TAG_ID]		  =
	   {"curve2", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		 check_tags_array_ignore, NULL},

	[CALIB_SENSOR_WDR_LOCAL_CURVE_TAG_ID]		  =
	   {"local_curve", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_WDR_GLOBAL_CURVE_TAG_ID]		 =
	   {"global_curve", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_WDR_NOISE_RATIO_TAG_ID]		  =
	   {"wdr_noiseratio", CALIB_TAG_TYPE_CHAR, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_WDR_BEST_LIGHT_TAG_ID]		  =
	   {"wdr_bestlight", CALIB_TAG_TYPE_CHAR, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_WDR_GAIN_OFF1_TAG_ID]		  =
	   {"wdr_gain_off1", CALIB_TAG_TYPE_CHAR, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_WDR_PYM_TAG_ID]		  =
	   {"wdr_pym_cc", CALIB_TAG_TYPE_CHAR, {-1, -1},
		 check_tags_array_ignore, NULL},
	[CALIB_SENSOR_WDR_EPSILON_TAG_ID]		   =
		{"wdr_epsilon", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_LVL_TAG_ID]		   =
		{"wdr_lvl_en", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_FLT_TAG_ID]		   =
		{"wdr_flt_sel", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_GAIN_MAX_CLIP_ENABLE_TAG_ID]		   =
		{"wdr_gain_max_clip_enable", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_GAIN_MAX_VALUE_TAG_ID]		  =
		{"wdr_gain_max_value", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_BAVG_TAG_ID]		   =
		{"wdr_bavg_clip", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_NONL_SEGM_TAG_ID]		   =
		{"wdr_nonl_segm", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_NONL_OPEN_TAG_ID]		   =
		{"wdr_nonl_open", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_NONL_MODE1_TAG_ID]		   =
		{"wdr_nonl_mode1", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_COE0_TAG_ID]		   =
		{"wdr_coe0", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_COE1_TAG_ID]		   =
		{"wdr_coe1", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_COE2_TAG_ID]		   =
		{"wdr_coe2", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_COE_OFF_TAG_ID]		   =
		{"wdr_coe_off", CALIB_TAG_TYPE_CHAR, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_MAXGAIN_FILTER_TAG_ID]		  =
		{"wdr_maxgain_filter", CALIB_TAG_TYPE_STRUCT, {-1, -1},
		  check_tags_array_info(calib_sensor_wdr_maxgian_sub_tags), NULL},
	 [CALIB_SENSOR_WDR_MAXGAIN_FILTER_ENABLE_TAG_ID]		   =
		{"wdr_maxgain_filter_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_MAXGAIN_SENSOR_GAIN_LEVEL_TAG_ID]		   =
		{"wdr_sensor_gain_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_WDR_MAXGAIN_MAXGAIN_LEVEL_TAG_ID]		   =
		{"wdr_maxgain_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},



	//CAC
	 [CALIB_SENSOR_CAC_TAG_ID]		   =
		{"CAC", CALIB_TAG_TYPE_CELL, {-1, -1},
		  check_tags_array_info(calib_sensor_cac_sub_tags), NULL},
	 [CALIB_SENSOR_CAC_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_CAC_RESOLUTION_TAG_ID]         =
        {"resolution", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SESNOR_CAC_X_NORMSHIFT_TAG_ID]         =
        {"x_normshift", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SESNOR_CAC_X_NORMFACTOR_TAG_ID]         =
        {"x_normfactor", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SESNOR_CAC_Y_NORMSHIFT_TAG_ID]         =
        {"y_normshift", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SESNOR_CAC_Y_NORMFACTOR_TAG_ID]		   =
		{"y_normfactor", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
		  check_tags_array_ignore, NULL},
	 [CALIB_SESNOR_CAC_X_OFFSET_TAG_ID]         =
        {"x_offset", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SESNOR_CAC_Y_OFFSET_TAG_ID]         =
        {"y_offset", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SESNOR_CAC_RED_PARAMETERS_TAG_ID]         =
        {"red_parameters", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SESNOR_CAC_BLUE_PARAMETERS_TAG_ID]         =
        {"blue_parameters", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//DPF
	 [CALIB_SENSOR_DPF_TAG_ID]         =
        {"DPF", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_system_DPF_sub_tags), NULL},
	 [CALIB_SENSOR_DPF_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_RESOLUTION_TAG_ID]         =
        {"resolution", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_ADPF_ENABLE_TAG_ID]         =
        {"adpf_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_NLL_SEGMENTATION_TAG_ID]         =
        {"NLL_SEGMENTATION", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_NLL_COEFF_TAG_ID]         =
        {"nll_coeff_n", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_SIGMA_GREEN_TAG_ID]         =
        {"SigmaGreen", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_SIGMA_RED_BLUE_TAG_ID]         =
        {"SigmaRedBlue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_GRADIENT_TAG_ID]         =
        {"Gradient", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_OFFSET_TAG_ID]         =
        {"Offset", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_NLGAINS_TAG_ID]         =
        {"NlGains", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//filter level

	 [CALIB_SENSOR_DPF_FILTERSETTING_TAG_ID]         =
        {"FilterSetting", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_system_DPF_filter_settint_sub_tags), NULL},
	 [CALIB_SENSOR_DPF_FILTERSETTING_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_FILTERENABLE_TAG_ID]         =
        {"FilterEnable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_DENOISELEVEL_TAG_ID]         =
        {"DeNoiseLevel", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_filter_settint_denoise_level_sub_tags), NULL},
     [CALIB_SENSOR_DPF_DENOISELEVEL_GAINS_TAG_ID]         =
        {"gains", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_DENOISELEVEL_DLEVEL_TAG_ID]         =
        {"dlevel", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_SHARPENINGLEVEL_TAG_ID]         =
        {"SharpeningLevel", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_filter_settint_sharpen_level_sub_tags), NULL},
     [CALIB_SENSOR_DPF_SHARPENINGLEVEL_GAINS_TAG_ID]         =
        {"gains", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_SHARPENINGLEVEL_SLEVEL_TAG_ID]         =
        {"slevel", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//filter reg config
	 [CALIB_SENSOR_DPF_FILT_LEVEL_REG_CONF_TAG_ID]         =
        {"FilterLevelRegConf", CALIB_TAG_TYPE_STRUCT, {-1, -1},
         check_tags_array_info(calib_system_DPF_filter_reg_config_sub_tags), NULL},
     [CALIB_SENSOR_DPF_FILT_LEVEL_REG_CONF_ENABLE_TAG_ID]         =
        {"FilterLevelRegConfEnable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_FILT_LEVEL_TAG_ID]         =
        {"FilterLevel", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_FILT_CHR_H_MODE_TAG_ID]         =
        {"flt_chr_h_mode", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_FILT_CHR_V_MODE_TAG_ID]         =
        {"flt_chr_v_mode", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_FILT_GRN_STAGE1_TAG_ID]         =
        {"flt_grn_stage1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_FILT_THRESH_BL0_TAG_ID]         =
        {"flt_thresh_bl0", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_FILT_THRESH_BL1_TAG_ID]         =
        {"flt_thresh_bl1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_FILT_FAC_BL0_TAG_ID]         =
        {"flt_fac_bl0", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_FILT_FAC_BL1_TAG_ID]         =
        {"flt_fac_bl1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_FILT_THRESH_SH0_TAG_ID]         =
        {"flt_thresh_sh0", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_FILT_THRESH_SH1_TAG_ID]         =
        {"flt_thresh_sh1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_FILT_FAC_SH0_TAG_ID]         =
        {"flt_fac_sh0", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_FILT_FAC_SH1_TAG_ID]         =
        {"flt_fac_sh1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_FILT_FAC_MID_TAG_ID]         =
        {"flt_fac_mid", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//demosaic th
	 [CALIB_SENSOR_DPF_FILT_DEMOSAIC_TH_CONF_TAG_ID]         =
        {"Demosaic_th_conf", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_filter_demosaic_th_sub_tags), NULL},
	 [CALIB_SENSOR_DPF_FILT_DEMOSAIC_TH_GAIN_TAG_ID]         =
        {"gains", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_FILT_DEMOSAIC_TH_LEVEL_TAG_ID]         =
        {"demosaic_th_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//demosaic lp
	 [CALIB_SENSOR_DPF_DEMOSAIC_LP_CONF_TAG_ID]         =
        {"Demosaic_lp_conf", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_filter_demosaic_lp_sub_tags), NULL},
     [CALIB_SENSOR_DPF_LP_EN_TAG_ID]         =
        {"lp_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_USE_OLD_VERSION_TAG_ID]         =
        {"use_old_lp", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_LU_DIVIDED_TAG_ID]         =
        {"lu_divided", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_GAINSARRAY_TAG_ID]         =
        {"gainsArray", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_THH_DIVIDED0_TAG_ID]         =
        {"thH_divided0", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_THH_DIVIDED1_TAG_ID]         =
        {"thH_divided1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_THH_DIVIDED2_TAG_ID]         =
        {"thH_divided2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_THH_DIVIDED3_TAG_ID]         =
        {"thH_divided3", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_THH_DIVIDED4_TAG_ID]         =
        {"thH_divided4", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_THCSC_DIVIDED0_TAG_ID]         =
        {"thCSC_divided0", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_THCSC_DIVIDED1_TAG_ID]         =
        {"thCSC_divided1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_THCSC_DIVIDED2_TAG_ID]         =
        {"thCSC_divided2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_THCSC_DIVIDED3_TAG_ID]         =
        {"thCSC_divided3", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_THCSC_DIVIDED4_TAG_ID]         =
        {"thCSC_divided4", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_DIFF_DIVIDED0_TAG_ID]         =
        {"diff_divided0", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_DIFF_DIVIDED1_TAG_ID]         =
        {"diff_divided1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_DIFF_DIVIDED2_TAG_ID]         =
        {"diff_divided2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_DIFF_DIVIDED3_TAG_ID]         =
        {"diff_divided3", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_DIFF_DIVIDED4_TAG_ID]         =
        {"diff_divided4", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_VARTH_DIVIDED0_TAG_ID]         =
        {"varTh_divided0", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_VARTH_DIVIDED1_TAG_ID]         =
        {"varTh_divided1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_VARTH_DIVIDED2_TAG_ID]         =
        {"varTh_divided2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_VARTH_DIVIDED3_TAG_ID]         =
        {"varTh_divided3", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_VARTH_DIVIDED4_TAG_ID]         =
        {"varTh_divided4", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_THGRAD_R_FCT_TAG_ID]         =
        {"thgrad_r_fct", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_THDIFF_R_FCT_TAG_ID]         =
        {"thdiff_r_fct", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_THVAR_R_FCT_TAG_ID]         =
        {"thvar_r_fct", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_THGRAD_B_FCT_TAG_ID]         =
        {"thgrad_b_fct", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_THDIFF_B_FCT_TAG_ID]         =
        {"thdiff_b_fct", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_THVAR_B_FCT_TAG_ID]         =
        {"thvar_b_fct", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_SIMILARITY_TH_TAG_ID]         =
        {"similarity_th", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_TH_VAR_EN_TAG_ID]         =
        {"th_var_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_TH_CSC_EN_TAG_ID]         =
        {"th_csc_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_TH_DIFF_EN_TAG_ID]         =
        {"th_diff_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_TH_GRAD_EN_TAG_ID]         =
        {"th_grad_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_TH_GRAD_TAG_ID]         =
        {"th_grad", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_TH_VAR_TAG_ID]         =
        {"th_var", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_TH_DIFF_TAG_ID]         =
        {"th_diff", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_TH_CSC_TAG_ID]         =
        {"th_csc", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_FLAT_LEVEL_SEL_TAG_ID]         =
        {"flat_level_sel", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_PATTERN_LEVEL_SEL_TAG_ID]         =
        {"pattern_level_sel", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_EDGE_LEVEL_SEL_TAG_ID]         =
        {"edge_level_sel", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPF_LP_RB_FILTER_EN_TAG_ID]         =
        {"rb_filter_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPF_LP_HP_FILTER_EN_TAG_ID]         =
        {"hp_filter_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//mfd
	 [CALIB_SESNOR_MFD_ENABLE_TAG_ID]         =
        {"MFD_Support", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SESNOR_MFD_GAIN_TAG_ID]         =
        {"MFD_Gain", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SESNOR_MFD_FRAMES_TAG_ID]         =
        {"MFD_Frames", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//uvnr
	 [CALIB_SESNOR_UVNR_ENABLE_TAG_ID]         =
        {"UVNR_Support", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SESNOR_UVNR_GAIN_TAG_ID]         =
        {"UVNR_Gain", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SESNOR_UVNR_RATIO_TAG_ID]         =
        {"UVNR_Ratio", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SESNOR_UVNR_DISTANCE_TAG_ID]         =
        {"UVNR_Distance", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//dsp 3dnr by jiang ming jun
	 [CALIB_SENSOR_DSP_3DNR_SETTING_TAG_ID]         =
        {"DSP_3DNR_Setting", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_system_DPF_DSP_3DNR_sub_tags), NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_ENABLE_TAG_ID]         =
        {"Enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_GAIN_LEVEL_TAG_ID]         =
        {"gain_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_NOISE_COEF_NUMERATOR_TAG_ID]         =
        {"noise_coef_numerator", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_NOISE_COEF_DENOMINATOR_TAG_ID]         =
        {"noise_coef_denominator", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//3dnr level settint
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LEVEL_SETTING_TAG_ID]         =
        {"Level_Setting", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_DSP_3DNR_levle_setting_sub_tags), NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_SP_NR_EN_TAG_ID]         =
        {"luma_sp_nr_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_SP_NR_LEVEL_TAG_ID]         =
        {"luma_sp_nr_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_TE_NR_EN_TAG_ID]         =
        {"luma_te_nr_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_TE_NR_LEVEL_TAG_ID]         =
        {"luma_te_nr_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_SP_NR_EN_TAG_ID]         =
        {"chrm_sp_nr_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_SP_NR_LEVEL_TAG_ID]         =
        {"chrm_sp_nr_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_TE_NR_EN_TAG_ID]         =
        {"chrm_te_nr_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_TE_NR_LEVEL_TAG_ID]         =
        {"chrm_te_nr_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SHP_EN_TAG_ID]         =
        {"shp_en", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SHP_LEVEL_TAG_ID]         =
        {"shp_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//3dnr luma setting
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_SETTING_TAG_ID]         =
        {"Luma_Setting", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_DSP_3DNR_luma_setting_sub_tags), NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_DEFAULT_TAG_ID]         =
        {"luma_default", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_SP_RAD_TAG_ID]         =
        {"luma_sp_rad", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_TE_MAX_BI_NUM_TAG_ID]         =
        {"luma_te_max_bi_num", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W00_TAG_ID]         =
        {"luma_w00", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W01_TAG_ID]         =
        {"luma_w01", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W02_TAG_ID]         =
        {"luma_w02", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W03_TAG_ID]         =
        {"luma_w03", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W04_TAG_ID]         =
        {"luma_w04", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W10_TAG_ID]         =
        {"luma_w10", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W11_TAG_ID]         =
        {"luma_w11", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W12_TAG_ID]         =
        {"luma_w12", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W13_TAG_ID]         =
        {"luma_w13", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W14_TAG_ID]         =
        {"luma_w14", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W20_TAG_ID]         =
        {"luma_w20", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W21_TAG_ID]         =
        {"luma_w21", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W22_TAG_ID]         =
        {"luma_w22", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W23_TAG_ID]         =
        {"luma_w23", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W24_TAG_ID]         =
        {"luma_w24", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W30_TAG_ID]         =
        {"luma_w30", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W31_TAG_ID]         =
        {"luma_w31", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W32_TAG_ID]         =
        {"luma_w32", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W33_TAG_ID]         =
        {"luma_w33", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W34_TAG_ID]         =
        {"luma_w34", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W40_TAG_ID]         =
        {"luma_w40", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W41_TAG_ID]         =
        {"luma_w41", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W42_TAG_ID]         =
        {"luma_w42", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W43_TAG_ID]         =
        {"luma_w43", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_LUMA_W44_TAG_ID]         =
        {"luma_w44", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//3dnr chrm setting
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_SETTING_TAG_ID]         =
        {"Chrm_Setting", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_DSP_3DNR_chrm_setting_sub_tags), NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_DEFAULT_TAG_ID]         =
        {"chrm_default", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_SP_RAD_TAG_ID]         =
        {"chrm_sp_rad", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_TE_MAX_BI_NUM_TAG_ID]         =
        {"chrm_te_max_bi_num", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W00_TAG_ID]         =
        {"chrm_w00", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W01_TAG_ID]         =
        {"chrm_w01", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W02_TAG_ID]         =
        {"chrm_w02", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W03_TAG_ID]         =
        {"chrm_w03", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W04_TAG_ID]         =
        {"chrm_w04", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W10_TAG_ID]         =
        {"chrm_w10", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W11_TAG_ID]         =
        {"chrm_w11", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W12_TAG_ID]         =
        {"chrm_w12", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W13_TAG_ID]         =
        {"chrm_w13", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W14_TAG_ID]         =
        {"chrm_w14", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W20_TAG_ID]         =
        {"chrm_w20", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W21_TAG_ID]         =
        {"chrm_w21", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W22_TAG_ID]         =
        {"chrm_w22", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W23_TAG_ID]         =
        {"chrm_w23", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W24_TAG_ID]         =
        {"chrm_w24", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W30_TAG_ID]         =
        {"chrm_w30", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W31_TAG_ID]         =
        {"chrm_w31", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W32_TAG_ID]         =
        {"chrm_w32", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W33_TAG_ID]         =
        {"chrm_w33", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W34_TAG_ID]         =
        {"chrm_w34", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W40_TAG_ID]         =
        {"chrm_w40", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W41_TAG_ID]         =
        {"chrm_w41", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W42_TAG_ID]         =
        {"chrm_w42", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W43_TAG_ID]         =
        {"chrm_w43", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_CHRM_W44_TAG_ID]         =
        {"chrm_w44", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//3dnr sharp setting
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SHP_SETTING_TAG_ID]         =
        {"Shp_Setting", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_DSP_3DNR_sharp_setting_sub_tags), NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SHP_DEFAULT_TAG_ID]         =
        {"shp_default", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_THR_TAG_ID]         =
        {"src_shp_thr", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_DIV_TAG_ID]         =
        {"src_shp_div", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_L_TAG_ID]         =
        {"src_shp_l", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_C_TAG_ID]         =
        {"src_shp_c", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W00_TAG_ID]         =
        {"src_shp_w00", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W01_TAG_ID]         =
        {"src_shp_w01", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W02_TAG_ID]         =
        {"src_shp_w02", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W03_TAG_ID]         =
        {"src_shp_w03", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W04_TAG_ID]         =
        {"src_shp_w04", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W10_TAG_ID]         =
        {"src_shp_w10", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W11_TAG_ID]         =
        {"src_shp_w11", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W12_TAG_ID]         =
        {"src_shp_w12", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W13_TAG_ID]         =
        {"src_shp_w13", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W14_TAG_ID]         =
        {"src_shp_w14", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W20_TAG_ID]         =
        {"src_shp_w20", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W21_TAG_ID]         =
        {"src_shp_w21", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W22_TAG_ID]         =
        {"src_shp_w22", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W23_TAG_ID]         =
        {"src_shp_w23", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W24_TAG_ID]         =
        {"src_shp_w24", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W30_TAG_ID]         =
        {"src_shp_w30", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W31_TAG_ID]         =
        {"src_shp_w31", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W32_TAG_ID]         =
        {"src_shp_w32", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W33_TAG_ID]         =
        {"src_shp_w33", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W34_TAG_ID]         =
        {"src_shp_w34", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W40_TAG_ID]         =
        {"src_shp_w40", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W41_TAG_ID]         =
        {"src_shp_w41", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W42_TAG_ID]         =
        {"src_shp_w42", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W43_TAG_ID]         =
        {"src_shp_w43", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DSP_3DNR_SETTING_SRC_SHP_W44_TAG_ID]         =
        {"src_shp_w44", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//DSP new 3DNR by luo ning
	 [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_TAG_ID]         =
        {"NEW_DSP_3DNR_Setting", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_system_DPF_DSP_NEW_3DNR_sub_tags), NULL},
     [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_3DNR_ENABLE_TAG_ID]         =
        {"Enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_DPC_ENABLE_TAG_ID]         =
        {"dpc_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_GAIN_LEVEL_TAG_ID]         =
        {"gain_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_YNR_SETTING_TAG_ID]         =
        {"ynr_Setting", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_DSP_NEW_3DNR_YNR_setting_sub_tags), NULL},
     [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_YNR_ENABLE_TAG_ID]         =
        {"ynr_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_TNR_ENABLE_TAG_ID]         =
        {"tnr_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_IIR_ENABLE_TAG_ID]         =
        {"iir_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_YNR_TIME_LEVEL_TAG_ID]         =
        {"ynr_time_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_YNR_SPACE_LEVEL_TAG_ID]         =
        {"ynr_space_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_UVNR_SETTING_TAG_ID]         =
        {"uvnr_Setting", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_DSP_NEW_3DNR_UVNR_setting_sub_tags), NULL},
     [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_UVNR_ENABLE_TAG_ID]         =
        {"uvnr_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_UVNR_LEVEL_TAG_ID]         =
        {"uvnr_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_SHARP_SETTING_TAG_ID]         =
        {"sharp_Setting", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_DPF_DSP_NEW_3DNR_sharp_setting_sub_tags), NULL},
     [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_SHARP_ENABLE_TAG_ID]         =
        {"sharp_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_NEW_DSP_3DNR_SETTING_SHARP_LEVEL_TAG_ID]         =
        {"sharp_level", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//dpcc
	 [CALIB_SENSOR_DPCC_TAG_ID]         =
        {"DPCC", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_sensor_dpcc_sub_tags), NULL},
	 [CALIB_SENSOR_DPCC_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_DPCC_RESOLUTION_TAG_ID]         =
        {"resolution", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPCC_REGISTER_TAG_ID]         =
        {"register", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_sensor_dpcc_register_sub_tags), NULL},
     [CALIB_SENSOR_DPCC_REGISTER_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_DPCC_REGISTER_VALUE_TAG_ID]         =
        {"value", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},

	//IE sharpen
	 [CALIB_SENSOR_IESHARPEN_TAG_ID]         =
        {"IESHARPEN", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_sensor_ie_sharpen_sub_tags), NULL},
     [CALIB_SENSOR_IESHARPEN_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_RESOLUTION_TAG_ID]         =
        {"resolution", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_ENABLE_TAG_ID]         =
        {"IEsharpenEnable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_CORING_THR_TAG_ID]         =
        {"coring_thr", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_FULL_RANGE_TAG_ID]         =
        {"full_range", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_SWITCH_AVG_TAG_ID]         =
        {"switch_avg", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_YAVG_THR_TAG_ID]         =
        {"yavg_thr", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_P_DELTA1_TAG_ID]         =
        {"p_delta1", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_P_DELTA2_TAG_ID]         =
        {"p_delta2", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_P_MAX_NUMBER_TAG_ID]         =
        {"pmaxnumber", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_P_MIN_NUMBER_TAG_ID]         =
        {"pminnumber", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_GAUSS_FLAT_COE_TAG_ID]         =
        {"gauss_flat_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_GAUSS_NOISE_COE_TAG_ID]         =
        {"gauss_noise_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_GAUSS_OTHER_COE_TAG_ID]         =
        {"gauss_other_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_L_P_GRAD_TAG_ID]         =
        {"l_p_grad", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_L_SHARP_FACTOR_TAG_ID]         =
        {"l_sharp_factor", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_L_LINE1_FILTER_COE_TAG_ID]         =
        {"l_line1_filter_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_L_LINE2_FILTER_COE_TAG_ID]         =
        {"l_line2_filter_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_L_LINE3_FILTER_COE_TAG_ID]         =
        {"l_line3_filter_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_H_P_GRAD_TAG_ID]         =
        {"h_p_grad", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_H_SHARP_FACTOR_TAG_ID]         =
        {"h_sharp_factor", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_H_LINE1_FILTER_COE_TAG_ID]         =
        {"h_line1_filter_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_H_LINE2_FILTER_COE_TAG_ID]         =
        {"h_line2_filter_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_H_LINE3_FILTER_COE_TAG_ID]         =
        {"h_line3_filter_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_UV_GAUSS_FLAT_COE_TAG_ID]         =
        {"uv_gauss_flat_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_UV_GAUSS_NOISE_COE_TAG_ID]         =
        {"uv_gauss_noise_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_UV_GAUSS_OTHER_COE_TAG_ID]         =
        {"uv_gauss_other_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_IESHARPEN_GAIN_DVIDE_TAG_ID]         =
        {"gain_dvide", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_L_LAP_MAT_COE_TAG_ID]         =
        {"l_lap_mat_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_IESHARPEN_H_LAP_MAT_COE_TAG_ID]         =
        {"h_lap_mat_coe", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},



	//CPROC
	 [CALIB_SENSOR_CPROC_TAG_ID]         =
        {"CPROC", CALIB_TAG_TYPE_CELL, {-1, -1},
          check_tags_array_info(calib_sensor_cproc_sub_tags), NULL},
	 [CALIB_SENSOR_CPROC_NAME_TAG_ID]         =
        {"name", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_CPROC_SATURATION_TAG_ID]         =
        {"saturation", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_CPROC_CONTRAST_TAG_ID]         =
        {"contrast", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_CPROC_BRIGHTNESS_TAG_ID]         =
        {"brightness", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_CPROC_HUE_TAG_ID]         =
        {"hue", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},

	//OTP
	 [CALIB_SENSOR_OTP_TAG_ID]         =
        {"OTP", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_sensor_otp_sub_tags), NULL},
     [CALIB_SENSOR_OTP_AWB_ENABLE_TAG_ID]         =
        {"otp_awb_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_OTP_AWB_GOLDEN_R_VALUE_TAG_ID]         =
        {"awb_golden_r_value", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_OTP_AWB_GOLDEN_GR_VALUE_TAG_ID]         =
        {"awb_golden_gr_value", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_OTP_AWB_GOLDEN_GB_VALUE_TAG_ID]         =
        {"awb_golden_gb_value", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
	 [CALIB_SENSOR_OTP_AWB_GOLDEN_B_VALUE_TAG_ID]         =
        {"awb_golden_b_value", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},
     [CALIB_SENSOR_OTP_LSC_ENABLE_TAG_ID]         =
        {"otp_lsc_enable", CALIB_TAG_TYPE_DOUBLE, {-1, -1},
          check_tags_array_ignore, NULL},


	//system
	 [CALIB_SYSTEM_TAG_ID]         =
        {"system", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_sub_tags), NULL},
     [CALIB_SYSTEM_AFPS_TAG_ID]         =
        {"AFPS", CALIB_TAG_TYPE_STRUCT, {-1, -1},
          check_tags_array_info(calib_system_AFPS_sub_tags), NULL},
     [CALIB_SYSTEM_AFPS_DEFAULT_TAG_ID]         =
        {"aFpsDefault", CALIB_TAG_TYPE_CHAR, {-1, -1},
          check_tags_array_ignore, NULL},
};

typedef struct calib_tag_check_info_s {
    // all sub tags should be checked
    uint32_t* checking_tags;
    // sub tags array size
    uint32_t count;
    // check times for each sub tag
    int16_t* tag_counts_remain;
} calib_tag_check_info_t;

uint32_t calib_check_calc_checksum(){

    calib_tag_info_t* tag_info = NULL;
	int i=0, j=0;
	uint32_t checkSum = 0;
	int length = 0;
	uint32_t value = 0;

	for(i=0; i<CALIB_IQ_TAG_END; i++){
		length = 0;
		tag_info = &(g_calib_tag_infos[i]);
		
		//add name
		if(tag_info->name == NULL){
			LOGE("%s(%d): pls init the taginfo in g_calib_tag_infos first, id:%d, Assert!\n",
				__FUNCTION__, __LINE__, i);
			DCT_ASSERT(false);		
		}
		
		length = strlen(tag_info->name); 
		for(j=0; j<length; j++){
			value = (uint32_t)(tag_info->name[j]);
			checkSum += value;
		}

		// add type
		value = (uint32_t)(tag_info->type);
		checkSum += value;

		//add size
		value = (uint32_t)(tag_info->size[0]);
		checkSum += value;
		value = (uint32_t)(tag_info->size[1]);
		checkSum += value;
	}

	LOGD("%s(%d): checksum:%u \n", __FUNCTION__, __LINE__, checkSum);

	LOGD("%s(%d): exit\n", __FUNCTION__, __LINE__);
	return checkSum;
}

/***************************************************************
 * name: calib_check_getID_by_name
 * description: called to get tag id from tag name
 *
 * params:
 *  tag_name: current tag name
 *  parent_tag_id:  current parent tag id, used to to retrieve the correspoing
 *          calib_tag_info_t from g_calib_tag_infos.
 *  tag_id:  current tag id, used to to retrieve the correspoing
 *          calib_tag_info_t from g_calib_tag_infos.
 *
 ***************************************************************/
 int calib_check_getID_by_name(char* tag_name, CALIB_IQ_TAG_ID_T parent_tag_id, CALIB_IQ_TAG_ID_T *tag_id ){

    uint32_t i=0;
 	calib_tag_check_info_t* parent_check_info =
        (calib_tag_check_info_t*)(g_calib_tag_infos[parent_tag_id].check_info);

	if(parent_tag_id >= CALIB_IQ_TAG_END){
		LOGE("%s(%d): parent_tag_id:%d parent_tag_name:%s  tag_name:%s --- tag id is is wrong: min:0 max:%d \n",
			__FUNCTION__, __LINE__,
			parent_tag_id, TAG_NAME(parent_tag_id),
			tag_name, CALIB_IQ_TAG_END);
        DCT_ASSERT(false);
        return -1;
    }


#ifdef CALIBDB_CHECK_DEBUG
	LOGD("%s(%d): parent_tag_id:%d parent_tag_name:%s tagname:%s \n",
		__FUNCTION__, __LINE__,
		parent_tag_id, TAG_NAME(parent_tag_id),
		tag_name);
#endif

	if (!parent_check_info) {
        LOGD("%s(%d): parent_tag_id:%d parent_tag_name:%s tag_name:%s --- parent_check_info is NULL, return\n",
        	__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_name);
		DCT_ASSERT(false);
        return -1;
    }

	//find sub tag id == tag_id , then set size to tag_counts_remain
	for( i=0; i < parent_check_info->count; i++){
		if( !strcmp(TAG_NAME(parent_check_info->checking_tags[i]), tag_name)){
			*tag_id = (CALIB_IQ_TAG_ID_T)parent_check_info->checking_tags[i];
			break;
		}
	}

	if(i < parent_check_info->count){
		return 0;
	}else{
		LOGE("%s(%d): can't find subtag:%s from parent tag:%s, assert!!!\n",
			__FUNCTION__, __LINE__, tag_name, TAG_NAME(parent_tag_id));
		DCT_ASSERT(false);
		return -1;
	}
}


/***************************************************************
 * name: calib_check_tag_attrs
 * description: called when entering tag. check tag's attributes.
 *
 * params:
 *  tag_id: current tag id, used to to retrieve the correspoing
 *          calib_tag_info_t from g_calib_tag_infos.
 *  size: the current tag's size parsed from xml
 *  type: the current tag's type parsed from xml
 *
 ***************************************************************/
 int calib_check_cell_set_size(CALIB_IQ_TAG_ID_T tag_id, CALIB_IQ_TAG_ID_T parent_tag_id, int size){

	calib_tag_info_t* tag_info = &(g_calib_tag_infos[tag_id]);
 	calib_tag_check_info_t* parent_check_info =
        (calib_tag_check_info_t*)(g_calib_tag_infos[parent_tag_id].check_info);

	if(tag_id >= CALIB_IQ_TAG_END || parent_tag_id >= CALIB_IQ_TAG_END){
		LOGE("%s(%d): parent_tag_id:%d parent_tag_name:%s  tag_id:%d tag_name:%s --- tag id is is wrong: min:0 max:%d \n",
			__FUNCTION__, __LINE__,
			parent_tag_id, TAG_NAME(parent_tag_id),
			tag_id, TAG_NAME(tag_id), CALIB_IQ_TAG_END);
        DCT_ASSERT(false);
        return -1;
    }

#ifdef CALIBDB_CHECK_DEBUG
	LOGD("%s(%d): parent_tag_id:%d parent_tag_name:%s tag id:%d tagname:%s size:%d \n",
		__FUNCTION__, __LINE__,
		parent_tag_id, TAG_NAME(parent_tag_id),
		tag_id, TAG_NAME(tag_id), size);
#endif

	if (!parent_check_info || !tag_info) {
        LOGD("%s(%d): parent_tag_id:%d parent_tag_name:%s tag_id:%d tag_name:%s --- invalid pointer, return\n",
        	__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id));
		DCT_ASSERT(false);
        return -1;
    }

	if(tag_info->type == CALIB_TAG_TYPE_CELL){
		//find sub tag id == tag_id , then set size to tag_counts_remain
		for(uint32_t i=0; i < parent_check_info->count; i++){
			if(parent_check_info->checking_tags[i] == tag_id){
				parent_check_info->tag_counts_remain[i] = size;
			}
		}
	}

	return 0;
}


/***************************************************************
 * name: calib_check_tag_attrs
 * description: called when entering tag. check tag's attributes.
 *
 * params:
 *  tag_id: current tag id, used to to retrieve the correspoing
 *          calib_tag_info_t from g_calib_tag_infos.
 *  size: the current tag's size parsed from xml
 *  type: the current tag's type parsed from xml
 *
 ***************************************************************/
int calib_check_tag_attrs(CALIB_IQ_TAG_ID_T tag_id,
                          uint32_t type,
                          int size,
                          CALIB_IQ_TAG_ID_T parent_tag_id)
{
    calib_tag_info_t* tag_info = &(g_calib_tag_infos[tag_id]);

    if(tag_id >= CALIB_IQ_TAG_END || parent_tag_id >= CALIB_IQ_TAG_END){
		LOGE("%s(%d): parent_tag_id:%d tag_id:%d --- tag id is is wrong: min:0 max:%d \n",
			__FUNCTION__, __LINE__, parent_tag_id, tag_id, CALIB_IQ_TAG_END);
        goto failure;
    }

#ifdef CALIBDB_CHECK_DEBUG
	LOGD("%s(%d): parent_tag_id:%d parent_tag_name:%s tag id:%d tagname:%s \n",
		__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id));
#endif

    if (!tag_info) {
        LOGE("%s(%d): parent_tag_id:%d parent_tag_name:%s  tag_id:%d tag_name:%s  --- tag_info is NULL \n",
        	__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id));
        goto failure;
    }

	if(size <= 0){
		  LOGE("%s(%d): parent_tag_id:%d parent_tag_name:%s  tag_id:%d tag_name:%s  --- tag size:%d is wrong \n",
        	__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id), size);
		goto failure;
	}

	// check type
	if(tag_info->type != type){
		 LOGE("%s(%d): parent_tag_id:%d parent_tag_name:%s  tag_id:%d tag_name:%s --- tag_info type not match (%d) != (%d) \n",
		 	__FUNCTION__, __LINE__,
		 	parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id),
		 	tag_info->type, type);
		 goto failure;
	}

	// check size if size is static
	if(tag_info->size[0] != -1 && tag_info->size[1] != -1){
		if(tag_info->size[0] * tag_info->size[1] != size){
			LOGE("%s(%d): parent_tag_id:%d parent_tag_name:%s  tag_id:%d tag_name:%s --- tag_info size not match (%d) != (%d) \n",
		 		__FUNCTION__, __LINE__,
		 		parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id),
		 		tag_info->size[0] * tag_info->size[1] , size);
			goto failure;
		}
	}

    return 0;

failure:

	LOGE("%s(%d): parent_tag_id:%d parent_tag_name:%s  tag_id:%d tag_name:%s --- ASSERT!!!\n",
		__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id));

	DCT_ASSERT(false);

	return -1;

}

/***************************************************************
 * name: calib_check_nonleaf_tag_start
 * description: called when entering a non leaf node tag. non leaf
 *              node means the node has more than one sub tags.
 * params:
 *  tag_id: current tag id, used to to retrieve the correspoing
 *          calib_tag_info_t from g_calib_tag_infos.
 *
 ***************************************************************/
int calib_check_nonleaf_tag_start(CALIB_IQ_TAG_ID_T tag_id, CALIB_IQ_TAG_ID_T parent_tag_id)
{
    // return if tag name is "cell"
    // if not the leaf node, generate check tag list
	calib_tag_info_t *tag_info = &(g_calib_tag_infos[tag_id]);
	calib_tag_check_info_t* check_info =
		(calib_tag_check_info_t *)malloc(sizeof(calib_tag_check_info_t));

	if(check_info == NULL){
		LOGE("%s(%d): tag_id:%d tag_name:%s  --- check_info malloc fail \n",
			__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id));
		goto failure;
	}
	memset(check_info, 0x00, sizeof(calib_tag_check_info_t));

#ifdef CALIBDB_CHECK_DEBUG
	LOGD("%s(%d): tag id:%d tagname:%s \n",
		__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id));
#endif

	if(tag_id >= CALIB_IQ_TAG_END || parent_tag_id >= CALIB_IQ_TAG_END){
		LOGE("%s(%d): tag_id:%d parent_tag_id:%d  --- tag_id is wrong:  min:0 max:%d\n",
			__FUNCTION__, __LINE__, tag_id, parent_tag_id, CALIB_IQ_TAG_END);
        goto failure;
    }

	//mark parent id first
	if(tag_id != CALIB_FILESTART_TAG_ID){
		int ret = calib_check_tag_mark(tag_id, parent_tag_id);
		if(ret != 0){
			LOGE("%s(%d): tag_id:%d tag_name:%s parent_id:%d parent_name:%s: mark parent error assert !!!\n",
				__FUNCTION__, __LINE__,
				tag_id, TAG_NAME(tag_id),
				parent_tag_id, TAG_NAME(parent_tag_id));
				goto failure;
		}
	}

    if (!check_info) {
		LOGE("%s(%d): tag_id:%d tag_name:%s  --- check info malloc fail!\n",
			__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id));
        goto failure;
    }

    if (tag_info->check_info != NULL) {
        LOGE("%s(%d): tag_id:%d tag_name:%s  ---  has check info already \n",
        	__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id));
        goto failure;
    }

    if (tag_info->sub_tags_array_size > 0) {
#ifdef CALIBDB_CHECK_DEBUG
		LOGD("%s(%d): tag_id:%d tag_name:%s --- sub_tags_array_size:%d \n",
			__FUNCTION__, __LINE__,
			tag_id, TAG_NAME(tag_id),
			tag_info->sub_tags_array_size);
#endif
        check_info->checking_tags =
			(uint32_t *)malloc(tag_info->sub_tags_array_size * sizeof(uint32_t));
		if(check_info->checking_tags == NULL){
			LOGE("%s(%d): tag_id:%d tag_name:%s --- checking_tags malloc fail \n",
				__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id));
			goto failure;
		}
		memset(check_info->checking_tags, 0x00,
			tag_info->sub_tags_array_size * sizeof(uint32_t));

        memcpy(check_info->checking_tags, tag_info->sub_tags_array,
               sizeof(uint32_t) * tag_info->sub_tags_array_size);

        check_info->tag_counts_remain =
			(int16_t *)malloc(tag_info->sub_tags_array_size * sizeof(int16_t));
        if (!check_info->tag_counts_remain) {
            LOGE("%s(%d): tag_id:%d tag_name:%s --- new tag_counts_remain malloc fail \n",
				__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id));
            goto failure;
        }
        for (int32_t i = 0; i < tag_info->sub_tags_array_size; i++ ) {
            check_info->tag_counts_remain[i] = 1;
        }
    }

    check_info->count = tag_info->sub_tags_array_size;
    tag_info->check_info = (void*)check_info;

#ifdef CALIBDB_CHECK_DEBUG
	LOGD("%s(%d): tag_id:%d tag_name:%s --- check info:%p  size:%d \n",
		__FUNCTION__, __LINE__,
		tag_id, TAG_NAME(tag_id),
		check_info, check_info->count);
#endif

    return 0;

failure:
    if (check_info) {
        if (check_info->tag_counts_remain)
            free(check_info->tag_counts_remain);
        if (check_info->checking_tags )
            free(check_info->checking_tags);
       free(check_info);
    }

    LOGE("%s(%d): tag_id:%d tag_name:%s --- return failure \n",
		__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id));
    return -1;
}

/***************************************************************
 * name: calib_check_tag_mark
 * description: called for every tag. for non leaf node tag, should
 *              be called before calib_check_tag_end.
 * params:
 *  tag_id: be marked as checked in parent's checking list
 *  parent_tag_id: to look for the parents checking list
 *  return
 *
 ***************************************************************/
int calib_check_tag_mark(CALIB_IQ_TAG_ID_T tag_id, CALIB_IQ_TAG_ID_T parent_tag_id)
{
    // remove the checkd tag from parent's checking tag list
    calib_tag_check_info_t* parent_check_info =
        (calib_tag_check_info_t*)(g_calib_tag_infos[parent_tag_id].check_info);

	if(tag_id >= CALIB_IQ_TAG_END || parent_tag_id >= CALIB_IQ_TAG_END ){
		LOGE("%s(%d): parent_tag_id:%d tag_id:%d --- tag_id is wrong:  min:0 max:%d\n",
			__FUNCTION__, __LINE__,
			parent_tag_id, tag_id, CALIB_IQ_TAG_END);
		DCT_ASSERT(false);
        return -1;
    }

#ifdef CALIBDB_CHECK_DEBUG
	LOGD("%s(%d): parent_tag_id:%d parent_tag_name:%s  tag id:%d tagname:%s \n",
		__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id));
#endif

    if (!parent_check_info) {
        LOGD("%s(%d): parent_tag_id:%d parent_tag_name:%s tag_id:%d tag_name:%s --- parent_check_info is NULL, return\n",
        	__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id));
		DCT_ASSERT(false);
        return -1;
    }

    bool found_checking_tag = false;
    for (uint32_t i = 0; i < parent_check_info->count; i++) {
        if (tag_id == parent_check_info->checking_tags[i]) {
            if (parent_check_info->tag_counts_remain[i] <=0 ) {
                LOGE("%s(%d): parent_tag_id:%d parent_tag_name:%s tag_id:%d tag_name:%s --- tag_counts_remain <= 0  assert!!!\n",
            		__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id));
                DCT_ASSERT(false);
                return -1;
            }
            parent_check_info->tag_counts_remain[i]--;
            found_checking_tag = true;
            break;
        }
    }

    if (!found_checking_tag) {
        LOGE("%s(%d): parent_tag_id:%d parent_tag_name:%s tag_id:%d tag_name:%s can't find this tag, assert!!!\n",
            		__FUNCTION__, __LINE__, parent_tag_id, TAG_NAME(parent_tag_id), tag_id, TAG_NAME(tag_id));
        DCT_ASSERT(false);
        return -1;
    }

    return 0;
}

/***************************************************************
 * name: calib_check_nonleaf_tag_end
 * description: called when leaving a tag. should be pair called
 *              with calib_check_nonleaf_tag_start. check if all
 *              needed sub tags have been parsed.
 * params:
 *  tag_id
 *  return
 *
 ***************************************************************/
int calib_check_nonleaf_tag_end(CALIB_IQ_TAG_ID_T tag_id)
{
    // return if tag name is "cell"
    if(tag_id >= CALIB_IQ_TAG_END){
		LOGE("%s(%d): tag_id:%d tag_name:%s --- tag_id is wrong:  min:0 max:%d\n",
			__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id), CALIB_IQ_TAG_END);
        return -1;
    }

#ifdef CALIBDB_CHECK_DEBUG
	LOGD("%s(%d): tag id:%d tagname:%s \n",
		__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id));
#endif

    calib_tag_info_t *tag_info = &(g_calib_tag_infos[tag_id]);
    calib_tag_check_info_t* check_info = (calib_tag_check_info_t*)(tag_info->check_info);
    if (!check_info) {
        LOGD("%s(%d): tag_id:%d tag_name:%s --- has check info already \n",
        	__FUNCTION__, __LINE__, tag_id, TAG_NAME(tag_id));
        return -1;
    }

#ifdef CALIBDB_CHECK_DEBUG
	LOGD("%s(%d): check info:%p  size:%d \n",
		__FUNCTION__, __LINE__, check_info, check_info->count);
#endif

    // check if all tags have been checked successfully
    for (uint32_t i = 0; i < check_info->count; i++) {
        if (check_info->tag_counts_remain[i] != 0) {
            LOGE("%s(%d): parent_id:%d parent_name:%s tag_id:%d tag_name:%s --- tag_counts_remain[%d]:%d != 0  assert!!!\n",
            	__FUNCTION__, __LINE__,
            	tag_id,
            	TAG_NAME(tag_id),
            	check_info->checking_tags[i],
            	TAG_NAME(check_info->checking_tags[i]),
            	i, check_info->tag_counts_remain[i]);
            DCT_ASSERT(false);
            return -1;
        }
    }

    // free check info
    if (check_info->tag_counts_remain)
        free(check_info->tag_counts_remain);
    if (check_info->checking_tags)
        free(check_info->checking_tags);

    free(check_info);

    tag_info->check_info = NULL;

    return 0;
}

